繁体   English   中英

如何在Python中将'>'作为参数提供给终端

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM