Почему подпроцесс. Открыть не работает - PullRequest
3 голосов
/ 19 октября 2011

Я много чего пробовал, но по какой-то причине не мог заставить работать вещи. Я пытаюсь запустить утилиту dumpbin MS VS, используя скрипт Python.

Вот что я пробовал (и что у меня не получилось)

1

tempFile = open('C:\\Windows\\temp\\tempExports.txt', 'w')
command = '"C:/Program Files/Microsoft Visual Studio 8/VC/bin/dumpbin" /EXPORTS ' + dllFilePath
process = subprocess.Popen(command, stdout=tempFile)
process.wait()
tempFile.close()

2.

tempFile = open('C:\\Windows\\temp\\tempExports.txt', 'w')
command = 'C:/Program Files/Microsoft Visual Studio 8/VC/bin/dumpbin /EXPORTS ' + dllFilePath
process = subprocess.Popen(command, stdout=tempFile)
process.wait()
tempFile.close()

3.

tempFile = open('C:\\Windows\\temp\\tempExports.txt', 'w')
process = subprocess.Popen(['C:\\Program Files\\Microsoft Visual Studio 8\\VC\\bin\\dumpbin', '/EXPORTS', dllFilePath], stdout = tempFile)
process.wait()
tempFile.close()

Есть ли у кого-нибудь идеи по поводу правильного выполнения (dumpbin /EXPORTS C:\Windows\system32\kernel32.dll > tempfile.txt) в Python?

Ответы [ 2 ]

5 голосов
/ 19 октября 2011

Шаблон аргумента для Popen ожидает список строк для вызовов не-оболочки и строку для вызовов оболочки. Это легко исправить. Дано:

>>> command = '"C:/Program Files/Microsoft Visual Studio 8/VC/bin/dumpbin" /EXPORTS ' + dllFilePath

Либо вызовите подпроцесс. Открыть с помощью shell=True:

>>> process = subprocess.Popen(command, stdout=tempFile, shell=True)

или используйте shlex.split для создания списка аргументов:

>>> process = subprocess.Popen(shlex.split(command), stdout=tempFile)
1 голос
/ 20 октября 2011
with tempFile:
    subprocess.check_call([
        r'C:\Program Files\Microsoft Visual Studio 8\VC\bin\dumpbin.exe',
        '/EXPORTS', 
        dllFilePath], stdout=tempFile)
...