我一直在研究Python的subprocess模块,我想使用python的bash进行“交互式会话”。我希望能够像在终端模拟器上一样从Python读取bash输出/写入命令。我猜一个代码示例可以更好地解释它:
subprocess
>>> proc = subprocess.Popen(['/bin/bash']) >>> proc.communicate() ('user@machine:~/','') >>> proc.communicate('ls\n') ('file1 file2 file3','')
(显然,这种方式行不通。)是否可能出现这种情况,怎么办?
非常感谢
请尝试以下示例:
import subprocess proc = subprocess.Popen(['/bin/bash'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) stdout = proc.communicate('ls -lash') print stdout
您必须阅读有关stdin,stdout和stderr的更多信息。看起来不错的演讲:http://www.doughellmann.com/PyMOTW/subprocess/
编辑:
另一个例子:
>>> process = subprocess.Popen(['/bin/bash'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE) >>> process.stdin.write('echo it works!\n') >>> process.stdout.readline() 'it works!\n' >>> process.stdin.write('date\n') >>> process.stdout.readline() 'wto, 13 mar 2012, 17:25:35 CET\n' >>>