2017-09-26 9 views
1

파이썬 스크립트에서 명령을 실행해야하는 기능이 있습니다. 다른 대답에서, 나는 call from subprocess module가 가장 안전한 방법이라고 생각했습니다. 그러나, 나는 그것을 통해 일할 수 없습니다. 나는이 내가 노력하고 무엇의 작은 버전입니다 파이썬 2.7python 스크립트에서 subprocess.call 실행

을 사용하고 있습니다 : 나는 이유를 알아낼 수 없습니까

subprocess.call([a]) 
    File "/usr/lib/python2.7/subprocess.py", line 522, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/usr/lib/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

:

import subprocess 
a = "echo hello" 
subprocess.call([a]) 

그것은 나에게 다음과 같은 오류를 제공합니다!

답변

1

당신은 문자열 또는 목록으로 명령을 전달할 수 있지만 목록에서 문자열, 그렇지 않으면 시스템이 분명히 존재하지 않는 echo hello 과정을 (실행하려고하는 등, (OSError: [Errno 2] No such file or directory 오류 메시지 설명). 문자열로 전달하는 경우 일부 시스템에서는 shell=True이 필요합니다.

그리고 shell=True은 또한 echo 같은 명령 쉘 내장 기능으로 요구되는 비 내장의 경우

import subprocess 
subprocess.call(["echo","hello"],shell=True) 

(내장 버전 /bin에서 일부 시스템에서 비를 가지고, 그냥 혼란에 추가) -in 명령, 그것은 시작 성능을 저하 불필요한 쉘 레이어를 추가하기 때문에, shell=True를 방지하고, 예를 들어 좋아하는 편집기를 실행하려면 코드 주입 (echo hello; rm -rf everything_on_disk)

하는 경향이있다 (나는 echo 여기에 단지 시험이라고 가정) 넌 할 수있어:

subprocess.call(["emacs","readme.txt"]) 
+0

안녕하십니까, 다음 질문을 올려주세요. 파일에 문자열 src를 쓰고 싶습니다. 그래서, 어떻게해야합니까? c1 = [ "echo", src, ">>", inputFile] 전화 (c1, shell = True) – Tarun

+0

후속 질문은 실제 주제가 아닙니다. https://stackoverflow.com/questions/4965159/python-how-to-redirect-output-with-subprocess –

+0

나중에 내가 이해 한 것이 옳았는지 확인하고 싶었습니다. 감사합니다 :) – Tarun

1

작성한 코드에 문제가있는 경우 subprocess.call은 목록의 첫 번째 요소가 명령 인 목록을 가져옵니다. 귀하의 경우 그것은 echo이고 hello 귀하의 인수는 목록의 다음 값이어야합니다. 그래서 코드는 이렇게 보일 것입니다.

import subprocess 

a = [ "echo","hello"] 
subprocess.call(a)