我正在使用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
谢谢
答案 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
。