如何使用管道将一个进程传递给另一个进程(读取文件内容-获取内容-创建新文件)?
How can I pass one process to another using pipe (read file contents-get contents-create new file)?
在问题中,我想传递进程 A,即下面读取 outfile.txt 文件内容的代码,传递给进程 B,后者将“下载” outfile.txt 文件的内容进程A并用进程A的内容创建一个新文件?
我该怎么做,或者有人可以给我一个主意吗?
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())
不知道你的意思我理解了没有
对我来说 Process A
和 Process 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=process_A.stdout)
# - show result -
stout, stderr = process_B.communicate()
print(stout.decode())
编辑:
如果要在进程间修改数据
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())
在问题中,我想传递进程 A,即下面读取 outfile.txt 文件内容的代码,传递给进程 B,后者将“下载” outfile.txt 文件的内容进程A并用进程A的内容创建一个新文件?
我该怎么做,或者有人可以给我一个主意吗?
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())
不知道你的意思我理解了没有
对我来说 Process A
和 Process 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=process_A.stdout)
# - show result -
stout, stderr = process_B.communicate()
print(stout.decode())
编辑:
如果要在进程间修改数据
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())