[英]How to give '>' as parameter to terminal in python
我想知道您是否可以帮助我解决问题:
在python中,我一直试图将'>'赋予subprocess.Popen([])或subprocess.call([]),但是它以某种方式改变了它在终端中输入的方式。 一个例子。
终端命令:
iperf -s -u -y C > data.csv
Python代码:
import subprocess as sub
sub.Popen(['iperf', '-s', '-u', '-y', 'C', '>', 'data.csv'])
要么
sub.Popen(['{iperf', '-s', '-u', '-y', 'C}', '>', 'data.csv'])
当我在终端中运行第一个命令时,它将执行得很好,但是当我执行第二个命令时,它将从字面上忽略“>”和“ data.csv”:
$ python test.py
iperf: ignoring extra argument -- >
iperf: ignoring extra argument -- data.csv
第三条命令返回:
$ 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
我曾尝试在DuckDuckGo和Google中搜索此问题,但我找不到答案,因为即使它们用作“>”,它们也不会解释'>'符号。
期待您的答复,在此先多谢!
>由外壳程序而不是程序解释。 由于默认情况下子进程不使用外壳程序,因此>会直接传递给程序。 使用shell=True
可能有效,但是要重定向stdout
,应使用stdout
参数。
例如,您可以使用
import subprocess
with open('data.csv', 'w') as f:
subprocess.Popen(['iperf', '-s', '-u', '-y', 'C'], stdout=f)
将命令作为字符串传递,并使用shell=True
信号发送给subprocess
,这是一个shell命令:
import subprocess
print subprocess.call([
"echo beer > zoot"
], shell=True)
0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.