我有一个字符串,这是一个带框架的命令,应该在命令行中执行
cmdToExecute = "TRAPTOOL -a STRING "ABC" -o STRING 'XYZ'"
我认为这个字符串包含了整个命令,应该从命令提示符触发。如果您仔细看一下cmdToExecute字符串,就可以看到带有单引号的值为XYZ的选项o。这需要使用单引号给出原因,否则我的工具TRAPTOOL将无法处理该命令。
我正在使用subprocess.Popen执行整个命令。 在将命令在shell中执行之前,我会打印出内容。
print "Cmd to be exectued: %r" % cmdToExecute
myProcess = subprocess.Popen(cmdToExecute, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
(stdOut, stdErr) = myProcess.communicate()
上述命令的输出是, 要执行的命令:TRAPTOOL -a STRING "ABC" -o \'XYZ\'。 您可以看到输出显示在打印时自动添加了反斜杠。实际上,在使用正则表达式测试字符串时,\不存在于字符串中。但是,当在我的框架上运行脚本时,TRAPTOOL会截断接收服务器上的部分字符串XYZ。我手动复制并粘贴了打印输出并尝试发送它,我在接收服务器上看到了同样的错误。然而,当我删除反斜杠时,它可以发送trap而没有任何截断。
1. 有人能说出为什么会发生这种情况吗? 2. 是否有任何方式可以查看 subprocess.Popen 实际执行的命令? 3. 是否有其他方法可以执行我的命令,除了 subprocess.Popen,可能会解决这个问题?
"ABC"
应该是\"ABC\"
。 - Pyrcecmd = ['TRAPTOOL', '-a', 'STRING', 'ABC', '-o', 'STRING', 'XYZ']
。请注意:引号内没有引号。也没有shell来解释它们。 - jfsr"""TRAPTOOL -a STRING "ABC" -o STRING 'XYZ'"""
- jfs