Mi chiedevo se il sarà interpretato da sh
o zsh
invece di bash
in server diversi?La `shell` in` shell = True` nel sottoprocesso significa `bash`?
Qualcuno ha idee a riguardo?
Cosa devo fare per assicurarmi che sia interpretato da bash
?
Mi chiedevo se il sarà interpretato da sh
o zsh
invece di bash
in server diversi?La `shell` in` shell = True` nel sottoprocesso significa `bash`?
Qualcuno ha idee a riguardo?
Cosa devo fare per assicurarmi che sia interpretato da bash
?
http://docs.python.org/2/library/subprocess.html
On Unix with shell=True, the shell defaults to /bin/sh
noti che/bin/sh è spesso collegato simbolicamente a qualcosa di diverso, per esempio su Ubuntu:
$ ls -la /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 2012 /bin/sh -> dash
È possibile utilizzare l'argomento executable
per sostituire il predefinito:
... Se shell = True, sulla Unix l'argomento eseguibile specifica un guscio di sostituzione per il default/bin/sh.
subprocess.call("if [ ! -d '{output}' ]; then mkdir -p {output}; fi",
shell=True,
executable="/bin/bash")
È possibile richiamare esplicitamente il guscio della vostra scelta, ma per il codice di esempio che hai postato questo non è l'approccio migliore. Invece, scrivi il codice direttamente in Python. Vedi qui: mkdir -p functionality in Python
Per specificare il guscio, use the executable parameter con shell=True
:
Se shell = True, su Unix l'argomento eseguibile specifica un guscio sostituzione per il default/bin/sh.
In [26]: subprocess.call("if [ ! -d '{output}' ]; then mkdir -p {output}; fi", shell=True, executable='/bin/bash')
Out[26]: 0
Chiaramente, utilizzando il parametro eseguibile è pulito, ma è anche possibile chiamare bash sh:
In [27]: subprocess.call('''bash -c "if [ ! -d '{output}' ]; then mkdir -p {output}; fi"''', shell=True)
Out[27]: 0
Significa - utilizzare la shell di default - qualunque essa default è –
@JonClements Grazie, Jon! Ma cosa dovrei fare per assicurarmi che sia interpretato da bash? –
@Firegun Chiama '/ usr/bin/env bash' e dagli i tuoi comandi come input. – millimoose