【问题标题】:argv doesn't read < or > pythonargv 不读取 < 或 > python
【发布时间】:2026-01-06 15:10:02
【问题描述】:

我正在使用 Python3,我想通过 argv 获取 >。这是我的代码:

str_args = [ str(x) for x in argv[1:] ] #create sequence
cmd = ''
for i in argv[1:]: #create str
    cmd += i + ' '
path = 'cmd.txt'
file=open(path, "a")
file.write(cmd + '\n')
file.close()

在 for 循环中,我连接参数以生成 linux 终端命令并写入 .txt 文件。我在其他地方执行该命令。当我输入 (大于或小于)时,它只会传递到 。示例:

echo 12 > test.txt

它只是得到

回声 12

并且没有通过 > test.txt 我该怎么办 ?它适用于非 示例。例如它很好地传递了这样的命令:

ping 8.8.8.8 -c 2 -s 60

谢谢

【问题讨论】:

    标签: python arguments parameter-passing command-line-arguments argv


    【解决方案1】:

    &gt;&lt; 由 shell 特殊处理,这与 python 无关,因为 shell 在调用您的代码之前将它们剥离。没有引号,&gt; 表示将命令的输出发送到作为下一个参数给出的文件。在您的情况下,脚本的标准输出将被重定向到文件test.txt

    要将它们作为字符串传递,您必须使用引号或转义字符:

    # using quotes
    python the_script.py echo 12 '>' test.txt
    
    # using the escape character
    python the_script.py echo 12 \> test.txt
    

    注意:您需要担心的不仅仅是&gt;&lt;* 和其他一些字符也需要保护。这些都在 bash 手册页(或您正在使用的任何 shell 的手册页)中提到。

    【讨论】:

    • 它有效,谢谢!但我使用该 argv 作为命令运行并写入文件。现在它正确写入文件但它不执行!但我可以在某个地方处理这个问题,你有两个目的的解决方案吗?
    • @OmidEstaji:没有足够的信息让我理解“不执行”是什么意思。如果您还有其他问题,我建议您单击“提问”按钮。评论是为了澄清,你问的是不同的问题。
    【解决方案2】:

    &gt;&lt; 等某些符号对 POSIX shell 具有特殊含义,它们由 shell 本身解释,它们不作为参数传递。要解决此问题,请在它们之前写一个反斜杠 (\),例如:python test.py a b c \&gt; foo。另一种选择是将它们放在引号中(无论哪种方式都推荐这样做)。此外,您的代码 sn-p 包含一个错误 - 它缺少 import sysargv 您可能是指 sys.argv

    【讨论】:

    • 谢谢,这只是我代码的一小部分,其中包含所有导入。