在Python中使用subprocss.Popen调用时,从命令行复制的命令未运行

时间:2015-02-19 18:52:42

标签: python

抓我的头......当我从这里复制它并将其粘贴到我的Windows 7命令行中时,这个curl命令在命令行中可以正常工作,但我不能让它在我的Python 2.7.9中执行脚本。说系统找不到指定的文件。 Popen使用'ping'或类似的东西工作得很好,所以我敢肯定这是一个我不会看到的混乱错字。我会欣赏一个单独的眼睛和任何关于错误的评论。

proc = subprocess.Popen("curl --ntlm -u : --upload-file c:\\temp\\test.xlsx http://site.domain.com/sites/site/SiteDirectory/folder/test.xlsx")

1 个答案:

答案 0 :(得分:2)

如果你还没有,请查看subprocess.Popen documentation的后两段:

  

args 应该是一系列程序参数,或者是一个字符串。默认情况下,如果 args 是序列,则要执行的程序是 args 中的第一项。如果 args 是一个字符串,则解释与平台有关,如下所述。有关与默认行为的其他差异,请参阅shell和可执行参数。除非另有说明,否则建议将 args 作为序列传递。

     

在Unix上,如果 args 是一个字符串,则该字符串将被解释为要执行的程序的名称或路径。 但是,只有在没有将参数传递给程序时才能这样做。 [强调我的]

相反,您应该传入列表,其中程序的每个参数(包括可执行文件名称本身)都作为列表中的单独项目给出。无论如何,这在跨平台环境中通常会更安全。

更新:我现在看到您正在使用Windows,在这种情况下,UNIX上的建议不适用。虽然事情是even more hairy,但在Windows上。最好的建议仍然是使用清单:)

更新2 :另一个可能的问题(事实上,就此答案的评论中报告的OP问题)是因为没有给出curl可执行文件的完整路径,如果Python解释器在具有不同PATH环境变量的环境中运行,则可能无法找到它。