Python 带有更大符号 (>) 的子进程调用不起作用
Python subprocess call with greater sign (>) not working
我有一个接受字符串并输出另一个字符串的可执行文件。现在我需要将一个文件作为输入提供给它,并将输出写入另一个文件。标准命令如下 executable_path < input > output
。现在我将其包装在 python 中。但我得到错误。
cmd = [executable_path , '<', 'tmp/input.txt', '>',
'tmp/output.txt']
p = subprocess.Popen(cmd)
p.communicate()
invalid argument: <
我也尝试加入 cmd 参数:
cmd = [executable_path, ' '.join(['<', 'tmp/input.txt', '>',
'tmp/output.txt'])]
invalid argument: < tmp/input.txt > tmp/output.txt
将命令作为字符串传递也不起作用。
p = subprocess.Popen(' '.join(cmd))
OSError: [Errno 2] No such file or directory
我在这里错过了什么?
重定向(<
、>
)由 shell 解释。您需要指定 shell=True
才能使用它们。
cmd = [executable_path , '<', 'tmp/input.txt', '>', 'tmp/output.txt']
p = subprocess.Popen(cmd, shell=True)
p.communicate()
subprocess.Popen() 具有三个便于重定向的参数:stdin
、stdout
和 stderr
。默认情况下,子进程保留 Python 实例的文件描述符。
with open('tmp/input.txt', 'rb', 0) as in_stream, \
open('tmp/output.txt', 'wb', 0) as out_stream:
subprocess.Popen([executable_path], stdin=in_stream, stdout=out_stream)
与 shell 命令相同 executable_path < tmp/input.txt > tmp/output.txt
。
open() 的参数是文件名、模式和缓冲。 "rb"表示"read binary data","wb"表示“(覆盖)写入二进制数据”,"ab"表示"append binary data"。
我有一个接受字符串并输出另一个字符串的可执行文件。现在我需要将一个文件作为输入提供给它,并将输出写入另一个文件。标准命令如下 executable_path < input > output
。现在我将其包装在 python 中。但我得到错误。
cmd = [executable_path , '<', 'tmp/input.txt', '>',
'tmp/output.txt']
p = subprocess.Popen(cmd)
p.communicate()
invalid argument: <
我也尝试加入 cmd 参数:
cmd = [executable_path, ' '.join(['<', 'tmp/input.txt', '>',
'tmp/output.txt'])]
invalid argument: < tmp/input.txt > tmp/output.txt
将命令作为字符串传递也不起作用。
p = subprocess.Popen(' '.join(cmd))
OSError: [Errno 2] No such file or directory
我在这里错过了什么?
重定向(<
、>
)由 shell 解释。您需要指定 shell=True
才能使用它们。
cmd = [executable_path , '<', 'tmp/input.txt', '>', 'tmp/output.txt']
p = subprocess.Popen(cmd, shell=True)
p.communicate()
subprocess.Popen() 具有三个便于重定向的参数:stdin
、stdout
和 stderr
。默认情况下,子进程保留 Python 实例的文件描述符。
with open('tmp/input.txt', 'rb', 0) as in_stream, \
open('tmp/output.txt', 'wb', 0) as out_stream:
subprocess.Popen([executable_path], stdin=in_stream, stdout=out_stream)
与 shell 命令相同 executable_path < tmp/input.txt > tmp/output.txt
。
open() 的参数是文件名、模式和缓冲。 "rb"表示"read binary data","wb"表示“(覆盖)写入二进制数据”,"ab"表示"append binary data"。