我需要运行 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.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()
关于python - 带参数的 Windows 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30663706/