argv无法读取<或> python

时间:2018-08-13 16:25:49

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

我正在使用Python3,并且想通过 argv 获得 << / strong>或> 。这是我的代码:

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

谢谢

2 个答案:

答案 0 :(得分:3)

Flowable.fromArray("The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog.", "This", "sentence", "is", "false.") .compose(FlowableTransformers.bufferUntil(v -> v.endsWith("."))) .map(list -> Strings.join(" ", list)) .test() .assertResult( "The quick brown fox jumps over the lazy dog.", "This sentence is false." ); >由shell特殊对待,这与python无关,因为shell在调用代码之前将它们剥离了。不带引号的<表示将命令的输出发送到作为下一个参数给出的文件。对于您而言,脚本的标准输出将重定向到文件>

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

test.txt

请注意:您不必担心# using quotes python the_script.py echo 12 '>' test.txt # using the escape character python the_script.py echo 12 \> test.txt ><等字符也需要受到保护。这些都在bash手册页(或您正在使用的任何shell的手册页)中提到。

答案 1 :(得分:1)

某些符号,例如><对POSIX Shell具有特殊的含义,它们由Shell本身解释,并且不作为参数传递。要解决此问题,请在它们之前写一个反斜杠(\),例如python test.py a b c \> foo。另一种选择是将它们用引号引起来(建议采用两种方法都可以)。另外,您的代码段包含一个错误-缺少import sys,到argv时,您可能是指sys.argv