Acho que a maneira correta é chamar o subprocesso da seguinte forma:
>>> prompt = subprocess.check_output("""echo $PS1""",shell=True,executable="/bin/zsh")
Então você pode verificar o resultado por >>> prompt
Enter
ou você pode usar a chamada para ver os resultados diretamente:
>>> subprocess.call("""echo $PS1""",shell=True,executable="/bin/zsh")
Então você não precisa chamar zsh
no próprio comando.
Para se comunicar interativamente Popen
pode ser usado:
>>> Popen(["/bin/zsh"], stdout=PIPE).communicate()[0]
SHELL_PROMPT% echo $PS1
SHELL_PROMPT% exit # exit to see the result of command
Para saber mais sobre isso, consulte Subprocesso
Observe também o aviso sobre o uso de shell=True
do link acima:
Warning: Executing shell commands that incorporate unsanitized input from an untrusted source makes a program vulnerable to shell injection, a serious security flaw which can result in arbitrary command execution. For this reason, the use of shell=True is strongly discouraged in cases where the command string is constructed from external input:
>>> from subprocess import call
>>> filename = input("What file would you like to display?\n")
What file would you like to display?
non_existent; rm -rf / #
>>> call("cat " + filename, shell=True) # Uh-oh. This will end badly...
shell=False does not suffer from this vulnerability; the above Note may be helpful in getting code using shell=False to work.