【问题标题】:Windows subprocess with arguments带参数的 Windows 子进程
【发布时间】:2015-06-05 10:00:39
【问题描述】:

我需要运行 pdb2mdb.exe 实用程序,并将 DLL 文件作为参数传递。

经过长时间的谷歌搜索,并使用各种call/Popen - 我仍然找不到解决方案......

这是最后一个代码:

def pdb2mdb(logger, modsrcdll):


    os.chdir("C:\\Program Files (x86)\\Unity\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.0\\")
    subprocess.call("pdb2mdb.exe %s" % modsrcdll)

但是 - 这样 pdb2mdb.exe 不想接受参数,并打印它的帮助:

Copy file d:\***.dll to C:\cloudlibrary\data
Copy file D:\***.dll.xml to C:\cloudlibrary\data
PDP FOUND
pdbexe found
Mono pdb to mdb debug symbol store converter
Usage: pdb2mdb assembly

没有os.chdir() - 它根本无法解析C:\\Program Files (x86)...

我之前在Linux下用过subprocess.call(),从来没有遇到过这样的问题,例如:

subprocess.call('ls -l %s | grep -v total' % self.path, shell=True)

【问题讨论】:

  • 嵌入空格字符的路径必须用" 引用。即subprocess.call('pdb2mdb.exe "%s"' % modsrcdll).

标签: python windows python-2.7


【解决方案1】:

你可以试试subprocess.Popen

p = subprocess.Popen("pdb2mdb.exe modsrcdll", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = p.communicate()
print out
print err

示例:下面的代码将从C:\\Windows\\System32 打开notepad.exe,并将文件test.txt 作为参数。这同样适用于您的.dll

import subprocess

    def myFunc():   
        p = subprocess.Popen("C:\\Windows\\System32\\notepad.exe c:\\Users\\admin\\Desktop\\test.txt", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        out, err = p.communicate()
        print out
        print err

    myFunc()

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2010-10-20
    相关资源
    最近更新 更多