保持子进程存活并继续给它命令?蟒蛇

n0p*_*0pe 9 python subprocess process popen

如果我subprocess用给定的命令在python中生成一个新的(假设我用python命令启动python解释器),我如何将新数据发送到进程(通过STDIN)?

use*_*876 13

使用标准子进程模块.您使用subprocess.Popen()来启动进程,它将在后台运行(即与您的Python程序同时运行).当您调用Popen()时,您可能希望将stdin,stdout和stderr参数设置为subprocess.PIPE.然后,您可以使用返回对象上的stdin,stdout和stderr字段来写入和读取数据.

未经测试的示例代码:

from subprocess import Popen, PIPE

# Run "cat", which is a simple Linux program that prints it's input.
process = Popen(['/bin/cat'], stdin=PIPE, stdout=PIPE)
process.stdin.write(b'Hello\n')
process.stdin.flush()
print(repr(process.stdout.readline())) # Should print 'Hello\n'
process.stdin.write(b'World\n')
process.stdin.flush()  
print(repr(process.stdout.readline())) # Should print 'World\n'

# "cat" will exit when you close stdin.  (Not all programs do this!)
process.stdin.close()
print('Waiting for cat to exit')
process.wait()
print('cat finished with return code %d' % process.returncode)
Run Code Online (Sandbox Code Playgroud)

  • Popen确实分叉了进程。这只是您要自己进行低级派生还是将其包装在较高级库中的问题。最终结果完全相同。 (2认同)