2016-08-09 4 views
0

명령 줄 스크립트를 실행하려고합니다. command.pyPython 실행 명령 줄

import subprocess 
proc = subprocess.Popen('python3 hello.py', stdout=subprocess.PIPE) 
tmp = proc.stdout.read() 
print(tmp) 

및 hello.py

print("hello") 

하지만

FileNotFoundError: [WinError 2]

가 어떻게 명령 및 인쇄 결과를 실행할 수 있습니다 오류 반환 : 나는이 ?

답변

1

Popen 경로에서 python3을 찾을 수 없습니다. 기본 오류가 hello.py 발견되지 않은 경우

, 당신은 python3 실행 때문에

python: can't open file 'hello.py': [Errno 2] No such file or directory 

당신은 subprocess에 예외를 얻을 것이다 (즉, 읽기되지 않음) 대신 stderr이 오류가 발생했을 것이지만, 실행할 파이썬 파일을 찾지 못했습니다.

먼저 파이썬 파일을 실행하려면 다른 프로세스에서 실행하지 않는 것이 좋습니다.

그러나 여전히 그렇게하고 싶다면 공백이 적절하게 처리되고 모든 파일에 대한 전체 경로를 제공하도록 이와 같은 인수 목록을 사용하여 실행하는 것이 좋습니다.

import subprocess 
proc = subprocess.Popen([r'c:\some_dir\python3',r'd:\full_path_to\hello.py'], stdout=subprocess.PIPE) 
tmp = proc.stdout.read() 
print(tmp) 

더 이동하려면 :

  • python3의 경우, 전체 경로를 지정하지 않도록 시스템 경로에 넣어 좋은 것입니다. 또한

    import subprocess,os 
    basedir = os.path.dirname(__file__) 
    proc = subprocess.Popen(['python3',os.path.join(basedir,'hello.py')], stdout=subprocess.PIPE) 
    tmp = proc.stdout.read() 
    print(tmp) 
    

    :이 위치한 경우 스크립트로

  • , 말, 같은 디렉토리 및 현재 스크립트, 당신은 경로를

개선 조각을 하드 코딩 피할 수 Popen을 전달 된 첫 번째 인수의 종류 execvp을 수행합니다. 전달 된 첫 번째 인수가 .bat 파일 인 경우 접두사 또는 shell=True을 추가하여 Popen에 직접 실행하는 대신 셸에서 프로세스를 생성하도록 지시해야합니다.

+0

확인, 자사의 제에 대한 작업,하지만 왜 내가 시저를 실행할 때 = subprocess.Popen ([ 'casperjs'os.path.join (기본 디렉토리, 'casper_script.js'), 표준 출력 = subprocess.PIPE) 그 반환 오류 – ivan

+0

capserjs가 설치됩니다 – ivan

+0

메신저 문제를 해결할 때 추가 "쉘 = 사실" – ivan