将参数/字符串传递给已经运行的进程 - Python 2.7

时间:2016-03-14 07:31:01

标签: python subprocess popen

我有两个Python脚本。

sub.py代码:

import time
import subprocess as sub

while 1:
  value=input("Input some text or number") # it is example, and I don't care about if it is number-input or text-raw_input, just input something
  proces=sub.Popen(['sudo', 'python', '/home/pi/second.py'],stdin=sub.PIPE)
  proces.stdin.write(value)

second.py代码:

import sys
while 1:
 from_sub=sys.stdin()#or sys.stdout() I dont remember...
 list_args.append(from_sub) # I dont know if syntax is ok, but it doesn't matter
 for i in list_arg:
    print i

首先我执行sub.py,然后输入一些东西,然后second.py文件将执行并打印我输入的所有内容,一次又一次...... 问题是我不想开新流程。应该只有一个过程。可能吗?

把你的手给我:)。

1 个答案:

答案 0 :(得分:1)

使用Pexpect可以解决此问题。在这里检查我的答案。它解决了类似的问题

https://stackoverflow.com/a/35864170/5134525

另一种方法是使用子进程模块中的Popen并将stdin和stdout设置为管道。稍微修改您的代码可以为您提供所需的结果

from subprocess import Popen, PIPE
#part which should be outside loop
args = ['sudo', 'python', '/home/pi/second.py']
process = Popen(args, stdin=PIPE, stdout=PIPE)
while True:
    value=input("Input some text or number")
    process.stdin.write(value)

您需要在循环外打开进程才能使其正常工作。如果您想要检查Keep a subprocess alive and keep giving it commands? Python

,此处会解决类似的问题

如果子进程在第一次迭代后退出并关闭所有管道,则此方法将导致错误。你不知何故需要阻止子进程接受更多的输入。这可以通过使用线程或使用第一个选项即Pexpect

来完成