jsmin.c를 다운로드하여 컴파일하고 터미널에서 javascript 파일로 실행하면 훌륭하게 작동합니다. 하지만 os.system()이나 os.popen()을 파이썬 스크립트 (동일한 입력 파일)에서 호출하면 출력 파일 (js 파일의 축소판)이 잘리는 것처럼 보입니다. stdout은 하위 프로세스가 종료되기 전에 플러시되지 않거나 jsmin이 일찍 종료되는 것처럼 보입니다. 디스크 버퍼링 등으로 계속 진행되고있는 것처럼 보입니다.jsmin이 파이썬 하위 프로세스에서 실행될 때 일찍 종료하는 이유는 무엇입니까?
하지만 그 중 어떤 것도 사실이 아닙니다. 종료 값은 출력이 잘리는 경우에도 main()에서 반환 한 값이며, fflush (stdout)에 대한 호출을 추가해도 아무런 차이가 없으며 jsmin을 호출 한 후 동일한 하위 셸에서 sync를 호출해도 어떤 차이.
fputc()에 대한 호출로 putc() 호출을 바꾸려고 시도했는데 처음에는 문제가 해결되지 않은 것처럼 보였습니다. 그러나 그럴 수 없게 문제가 다시 발생하기 시작했습니다. 안정적으로 발생합니다. Bizare?
나는 jsmin.c에 문제가 있다고 말하고 싶지만 명령 행에서 같은 입력 파일을 실행할 때 프로그램이 잘 동작하므로 python 하위 프로세스에서 실행하는 것과 관련이있다.
가 여기 내 서브 프로세스 호출입니다 :
result = os.system('jsmin < ' + tpathname + ' > ' + tpathname + '.min')
(나는 경로에 JSMin을 넣어 가지고, 그것을 실행, 나는 ℃와 pH 5.5 또는 다른 pH 파일의 예상 결과의 대부분을 얻을.)
사람이 수 이 문제의 원인을 상상해보십시오.
당신이 쉘에서 직접에서 실행할 때'에서 JSMin jsfile.min' 명령이 제대로 작동 건가요? 왜냐하면'os.system()'가 쉘을 포크하여 _jsmin_의 실행 환경이 두 경우 모두 거의 동일해야하기 때문에 이상합니다. –
C2H5OH
그래, 그게 내가 말하는거야. 나는 심지어 새틴 춤으로 시작하는 jsmin을 실행하는 쉘 스크립트를 만들려고 시도했다. 이 셸 스크립트는 터미널에서 작동하지만 파이썬에서는 발생하지 않습니다. WTF? – Shavais
쉘 스크립트에서 env를 써서 파이썬 서브 프로세스에서 실행하고 셸에서 실행하는 것과 다른 env 차이점을 감지 할 수 있는지 알아 보았습니다. 유일한 차이점은 3 대신 SHLVL = 4이고 PWD가 다릅니다. 그게 다야, 그 외 모든 것은 정확히 동일합니다. – Shavais