Popen не може да намери партиден файл, наличен в командния ред

Опитвам се да изпълня програма, която е достъпна за моя команден ред, но не е в Python.

Командния ред:

C:\Users\Documents\libexe\tfc\bin\Debug>asc-dir
asc-dir.: directory not linked to an ASC directory //Expected output

Тестови скрипт:

proc = subprocess.Popen('asc-dir', stdout=subprocess.PIPE)
(result, err) = proc.communicate()

print(result)   

грешка:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensio
ns\Microsoft\Python Tools for Visual Studio\2.1\visualstudio_py_util.py", line 1
06, in exec_file
    exec_code(code, file, global_variables)
  File "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensio
ns\Microsoft\Python Tools for Visual Studio\2.1\visualstudio_py_util.py", line 8
2, in exec_code
    exec(code_obj, global_variables)
  File "C:\Users\mryan.\git\web\PBNBApi\pbnb_cli\test.py", lin
e 9, in <module>
    proc = subprocess.Popen('asc-dir', stdout=subprocess.PIPE)
  File "C:\Python27\lib\subprocess.py", line 709, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
Press any key to continue . . .

person TomSelleck    schedule 23.07.2014    source източник
comment
shell=True е правилният начин, друга опция е добавяне на разширението bat: proc = subprocess.Popen('asc-dir.bat', stdout=subprocess.PIPE)   -  person Fernando Gonzalez Sanchez    schedule 26.03.2015


Отговори (2)


Изглежда, че работите през някакво разширение на Visual Studio. Може би се занимава с PATH env var, предадена на python? Поради това може да се наложи да посочите абсолютния път.

import os
print os.environ['PATH']
person Jahaja    schedule 23.07.2014

Изглежда, че трябваше да задам shell=True

proc = subprocess.Popen('asc-dir', stdout=subprocess.PIPE, shell=True)
(result, err) = proc.communicate()
person TomSelleck    schedule 23.07.2014