小编典典

与python的bash交互

python

我一直在研究Python的subprocess模块,我想使用python的bash进行“交互式会话”。我希望能够像在终端模拟器上一样从Python读取bash输出/写入命令。我猜一个代码示例可以更好地解释它:

>>> proc = subprocess.Popen(['/bin/bash'])
>>> proc.communicate()
('user@machine:~/','')
>>> proc.communicate('ls\n')
('file1 file2 file3','')

(显然,这种方式行不通。)是否可能出现这种情况,怎么办?

非常感谢


阅读 154

收藏
2020-12-20

共1个答案

小编典典

请尝试以下示例:

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'
>>>
2020-12-20