-1

我正在尝试从 Windows 中的命令提示符运行程序。我有一些问题。代码如下:

commandString = "'C:\Program Files\WebShot\webshotcmd.exe' //url '" + columns[3] + "' //out '"+columns[1]+"~"+columns[2]+".jpg'"
os.system(commandString)
time.sleep(10)

所以用单引号我得到“文件名、目录名或卷标语法不正确。” 如果我用 \" 替换单引号,那么它会说明“'C:\Program' 不是有效的可执行文件”。

我意识到这是一个语法错误,但我不太确定如何解决这个问题......

column[3] 包含从 Web 浏览器粘贴的完整 url 副本(因此它应该是 url 编码的)。column[1] 将仅包含数字和句点。column[2] 包含一些文本,双引号和冒号被替换。提到以防万一...

谢谢!

4

2 回答 2

2
  • Windows 在这种情况下需要双引号,而您使用了单引号。
  • 使用subprocessmodule 而不是os.system,它更健壮,避免直接调用 shell,让您不必担心令人困惑的转义问题。
  • 不要+用来把长字符串放在一起。string %s" % (formatting,)使用更易读、更高效、更惯用的字符串格式 ( )。
  • 在这种情况下,无论如何不要将长字符串作为 shell 命令,创建一个列表并将其传递给subprocess.call.
  • 尽我所能告诉你,你正在逃避你的正斜杠,而不是你的反斜杠,这是向后的。一个字符串文字//在它创建的字符串中都有两个斜杠。在任何情况下,您都应该使用该模块,而不是使用os.path任何一个,它可以避免解析转义造成的任何混淆,并且通常使脚本更具可移植性。
于 2010-02-17T17:12:42.470 回答
1

使用subprocess模块调用系统命令。另外,尝试删除单引号并使用双引号。

于 2010-02-17T16:47:02.643 回答