我想知道你是否可以帮助我解决问题:
在python中我一直试图给'sub'.Popen([])或subprocess.call([]),但不知何故它改变了它在终端中的输入方式.一个例子.
终端命令:
iperf -s -u -y C > data.csv
Run Code Online (Sandbox Code Playgroud)
Python代码:
import subprocess as sub
sub.Popen(['iperf', '-s', '-u', '-y', 'C', '>', 'data.csv'])
Run Code Online (Sandbox Code Playgroud)
要么
sub.Popen(['{iperf', '-s', '-u', '-y', 'C}', '>', 'data.csv'])
Run Code Online (Sandbox Code Playgroud)
当我在终端中运行第一个命令时,它会执行得很好,但是当我执行第二个命令时,它会忽略'>'和'data.csv':
$ python test.py
iperf: ignoring extra argument -- >
iperf: ignoring extra argument -- data.csv
Run Code Online (Sandbox Code Playgroud)
第三个命令返回:
$ python test.py
Traceback (most recent call last):
File "test.py", line 3, in <module>
sub.call(['{iperf', '-s', '-u', '-y', 'C}', '>', 'data.csv'])
File "/usr/lib/python2.7/subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)
我试过在这个问题上搜索DuckDuckGo和Google,但我找不到答案,因为他们不会解释'>'符号,即使用作">"也是如此.
我期待着你的回答,非常感谢!
小智 5
>由shell解释,而不是由程序解释.由于默认情况下子进程不使用shell,因此>将直接传递给程序.使用shell=True可能有效,但要重定向stdout,您应该使用stdout参数.
例如,你可以使用
import subprocess
with open('data.csv', 'w') as f:
subprocess.Popen(['iperf', '-s', '-u', '-y', 'C'], stdout=f)
Run Code Online (Sandbox Code Playgroud)