2
환경을 사용하는 일부 셸 프로그램을 호출하려고하는데 올바른 방법을 찾으려고합니다. 나는이 조각에 내려 삶은 : "쉘이"true를 인쇄 "('\ n을'없음)"그리고 그것은 거짓이 인쇄 "로 설정되어 ('안녕하세요 $ FOO \ n에 설정되어popen 호출에서 변수 확장/대체
import subprocess as sp
p = sp.Popen(["echo","Hello","$FOO"], env = {"FOO":"42"}, stdout = sp.PIPE, shell = True)
p.wait()
print(p.communicate())
', None) ")하지만,"('Hello 43 \ n ', None) "행을 따라 인쇄 할 것을 기대하고있었습니다. 내가 뭘 잘못하고 더 좋은 방법이 그것을 할 수 있습니까?
부모의 ENVVAR 확장 할 수 있어야한다 :'os.path.expandvars ("$의 PATH는 윈도우에서 작동을")' – jfs
를 [목록 인수를 사용하여 subprocess.Popen 명령을'shell = True'와 함께 지정하지 마십시오.] (http://bugs.python.org/issue21347) – jfs
읽지 않는 한'stdout = PIPE'을 사용하지 마십시오. 나중에'p.stdout'에서. 'p.wait()'를 제거하십시오 : 자식 프로세스가 파이프 버퍼를 채우기에 충분한 출력을 생성하면 프로그램을 교착 상태로 만들 수 있습니다. – jfs