2010-02-17 57 views
-1

我试图从Windows命令提示符运行程序。我有一些问题。代码如下:Python,试图从命令提示符运行程序

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

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

我意识到这是一个语法错误,但我不太清楚解决这个问题....

列[3]包含从网络浏览器粘贴完整的url复制(所以它应该是网址编码)列[1]将只包含数字和句点。一些文字,双引号和冒号更换。万一一提...

谢谢!

+0

尝试删除单引号。 – ghostdog74 2010-02-17 16:46:35

+0

另外,阅读所有这些答案:http://stackoverflow.com/search?q=%5Bpython%5D+subprocess+windows。你的问题是重复的。例如,这可能有所帮助:http://stackoverflow.com/questions/221097/what-is-the-best-way-on-python-2-3-for-windows-to-execute-a-program-like -ghostscr – 2010-02-17 18:26:17

回答

1

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

1
  • 在这种情况下,Windows需要双引号,并且您使用了单引号。
  • 使用subprocess模块而不是os.system,这是更健壮,避免直接调用shell,使您不必担心混淆转义问题。
  • 不要使用+将长字符串放在一起。使用字符串格式(string %s" % (formatting,)),它更具可读性,效率和习惯。
  • 在这种情况下,无论如何都不要将长字符串作为shell命令,制作一个列表并将它传递给subprocess.call
  • 尽我所能地告诉你,你正在逃避你的正斜杠,但不是你的反斜杠,这是倒退。带有//的字符串文字在其制作的字符串中都有斜杠。在任何情况下,您都不应该使用os.path模块,这样可以避免解析转义时产生的混淆,并且通常使脚本更具可移植性。
相关问题