首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个参数从python脚本运行windows可执行文件

使用多个参数从python脚本运行windows可执行文件
EN

Stack Overflow用户
提问于 2013-02-13 02:13:41
回答 1查看 1.9K关注 0票数 0

我正在开发一个程序,它将找到一些文件并将文件信息提供给NSIS脚本。NSIS脚本接受命令行如下

代码语言:javascript
复制
makensis.exe /DON="This is one" /DOD="c:\path1\path2 to dir\path 3" scriptfile.nsi

每次执行程序时,开关的值都会发生变化。我已经尝试让它使用subprocess.call和subprocess.Popen来执行。我所讨论的问题与引用有关。

首先,子进程调用似乎将整个参数语句放在双引号之间,从而使NSIS将它们视为一个参数。其次,我很难在命令行中正确引用各个开关。下面是我的程序当前样子的片段。

代码语言:javascript
复制
subprocess.Popen([setup.profile['NSISExe'], ' /DON="' + setup.profile['DESC'] + '" /DOD="' + setup.profile['InstallDir'] + \
   '" /DMT="' + app.machine_type.get() + '" /DSD="' + os.path.join(WinShellVar.LOCAL_APPDATA, 'MLC CAD', appname) + \
   '" /DXV=X6 ' + setup.profile['NSISScript']])

这是NSIS的输出

代码语言:javascript
复制
    Can't open script " /DON="Mastercam X6 Standard" /DOD="C:\Users\John\Desktop" /D
MT="mill" /DSD="C:\Users\John\AppData\Local\MLC CAD\mcdeftool" /DXV=X6 bin\packa
ge.002.nsi"

正如您所看到的,我正在使用一个混合的数据包,获取一些数据片段和一些来自类调用的数据(如果我的术语有点不正确,请放心,我已经学习python大约4天了,请很好地纠正我)。如果像这样使用这些数据是“非unpythonic”,请告诉我。

期待您的投入

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-13 02:19:50

免责声明--我不使用窗户

我想你可能想要这样的东西:

代码语言:javascript
复制
subprocess.Popen([setup.profile['NSISExe'], '/DON=' + setup.profile['DESC'],
                  '/DOD=' + setup.profile['InstallDir'],
                  '/DMT=' + app.machine_type.get(),
                  '/DSD=' + os.path.join(WinShellVar.LOCAL_APPDATA, 'MLC CAD', appname), 
                  '/DXV=X6',
                  setup.profile['NSISScript']])

当shell读取命令行时,它在非引用的、非转义的空格上拆分。当您将一个列表传递给Popen时,它期望list元素是它处理shell拆分参数的方式。另一个选项是传递一个字符串(而不是列表),就像将其放入windows并将shell=True传递给Popen一样。但这种方法并不可取,因为它更容易受到空壳注入不安全性的影响。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14845352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档