Python 如何使用管道将一个进程传递给另一个进程(读取文件内容获取内容创建新文件)?
如问题中所述,我希望传递进程A,即下面读取outfile.txt文件内容的代码,传递给进程B,进程B将“下载”进程A的内容,并使用进程A的内容创建一个新文件 我该怎么做,或者有人能给我一个主意吗Python 如何使用管道将一个进程传递给另一个进程(读取文件内容获取内容创建新文件)?,python,file,process,subprocess,pipe,Python,File,Process,Subprocess,Pipe,如问题中所述,我希望传递进程A,即下面读取outfile.txt文件内容的代码,传递给进程B,进程B将“下载”进程A的内容,并使用进程A的内容创建一个新文件 我该怎么做,或者有人能给我一个主意吗 import subprocess proc = subprocess.Popen(['python','outfile.txt'],stdout=subprocess.PIPE) while True: line = proc.stdout.readline() if not line:
import subprocess
proc = subprocess.Popen(['python','outfile.txt'],stdout=subprocess.PIPE)
while True:
line = proc.stdout.readline()
if not line:
break
print("test:", line.rstrip())
我不知道我是否明白你想做什么 对我来说,
过程A
和过程B
意味着在一个脚本中有两个Popen
如果要直接从一个进程发送到另一个进程,则可以使用
process_B = subprocess.Popen(..., stdin=process_A.stdout)
最小工作代码。它在Linux上运行
ls | sort-r
import subprocess
#import sys
process_A = subprocess.Popen(['ls'], stdout=subprocess.PIPE)
process_B = subprocess.Popen(['sort', '-r'], stdout=subprocess.PIPE, stdin=process_A.stdout)
# - show result -
for line in process_B.stdout:
#sys.stdout.write(line.decode())
print(line.decode().rstrip())
或使用'communicate()显示结果
编辑: 如果要在进程之间修改数据
import subprocess
process_A = subprocess.Popen(['ls', '/'], stdout=subprocess.PIPE)
process_B = subprocess.Popen(['sort', '-r'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
# - get all from one process -
stdout_A, stderr_A = process_A.communicate()
# - modify all -
stdout_A = stdout_A.upper()
# - send all to other process and get result -
stout_B, stderr_B = process_B.communicate(stdout_A)
print(stout_B.decode())
或
你所说的流程内容是什么意思?我不明白你想做什么。您只能传递数据/字符串,不能传递进程。如果您想运行两个
子进程
,那么在相同的代码中运行它,并在另一个进程中使用stdin
从第一个进程开始使用stdout
,这样您就可以将数据/字符串从一个进程发送到另一个进程。运行open('outfile.txt')。read()
?或对于打开的行('outfile.txt'):打印('test:',line.rstrip())
最终使用sys.stdout.write
而不是print()
收到erorr消息吗?始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图,也不是指向外部门户的链接)进行讨论(不是评论)。还有其他有用的信息。@furas我只想让进程A(上面的代码)和进程B通过管道进行通信。进程A逐行读取文件并将其发送给进程B,然后进程B将其写入另一个文件。
import subprocess
process_A = subprocess.Popen(['ls', '/'], stdout=subprocess.PIPE)
process_B = subprocess.Popen(['sort', '-r'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
# - get all from one process -
stdout_A, stderr_A = process_A.communicate()
# - modify all -
stdout_A = stdout_A.upper()
# - send all to other process and get result -
stout_B, stderr_B = process_B.communicate(stdout_A)
print(stout_B.decode())
import subprocess
process_A = subprocess.Popen(['ls', '/'], stdout=subprocess.PIPE)
process_B = subprocess.Popen(['sort', '-r'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
# - send from one process to another line by line -
for line in process_A.stdout:
line = line.upper()
process_B.stdin.write(line)
# - get result -
stout_B, stderr_B = process_B.communicate()
print(stout_B.decode())