我有两个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文件将执行并打印我输入的所有内容,一次又一次...... 问题是我不想开新流程。应该只有一个过程。可能吗?
把你的手给我:)。
答案 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
来完成