【问题标题】:Python, trying to run a program from the command promptPython,试图从命令提示符运行程序
【发布时间】:2010-02-17 16:43:50
【问题描述】:

我正在尝试从 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] 包含一些文本,双引号和冒号被替换。以防万一……

谢谢!

【问题讨论】:

标签: python windows command-line command-prompt os.system


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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 2018-12-21
      • 2017-02-28
      相关资源
      最近更新 更多