2016-08-28 3 views
0

나는 C 쉘 스크립트를 작성한 다음 작은 프로세스로 스크립트를 호출하는 작은 파이썬 프로그램을 작성했다. 그러나, 파이썬 스크립트를 실행하는 데 실패합니다. 필자는 터미널에서이를 테스트했으며 스크립트가 터미널에서 실행되지 않는다는 것을 발견했습니다 (즉, 파이썬 문제가 아님). 추가 테스트 결과, 동일한 스크립트를 텍스트 편집기 (vi)에 작성한 다음 터미널에서 성공적으로 실행할 수 있음을 나타냅니다 (즉, 스크립트의 내용이 잘못되었다고 생각하지 않음). 결국 나는 ./myscript.com으로 터미널에서 직접 파이썬으로 출력을 실행하려고하면 이 아닌이 실행됨을 발견했습니다. 그러나 vi로 열면 NO을 변경하고 저장 한 다음 ./myscript.com (정확히 동일한 명령)을 사용하여 터미널에서 저장하고 실행합니다. 이 스크립트는 아래에 포함되어 있습니다. 그러나 사용하기 위해 대부분의 내용은 내가 실행하려고하는 특정 프로그램에만 한정됩니다. 나는 이것을 더 자세히 디버깅 할 방법을 모르거나 vi에서 열기, 저장 및 닫기의 효과가 스크립트 실행을 허용하는 데 충분한 이유를 알지 못합니다. (예를 들어 사용 권한을 확인했는데 vi 단계 이후에 변경되지 않았습니다.) 계속 진행하는 방법에 대한 제안은 많이 감사하겠습니다.파이썬에서 쉘 스크립트 실행하기

#!/bin/csh 
# 
bin2pipe -in /full/path/to/this/script/recon.spc -bad 0.0 -noswap \ 
-xN 1714 \ 
-xT 1714 \ 
-xFT Freq \ 
-xMODE Real \ 
-xSW 4184.570312 \ 
-xCAR 10.929523 \ 
-xOBS 800.130005 \ 
-xLAB 1H \ 
-yN 2048 \ 
-yT 2048 \ 
-yFT Freq \ 
-yMODE Real \ 
-ySW 1700.680054 \ 
-yCAR 125.728023 \ 
-yOBS 81.075996 \ 
-yLAB 1H \ 
-ndim 2 \ 
|nmrPipe -fn TP -auto \ 
|nmrPipe -fn REV \ 
|nmrPipe -fn TP -auto \ 
-out recon.spc.pipe.ft2 -ov -verb 
+0

파이썬에서 어떻게 호출하고 있습니까? –

+0

파이썬에서 저는'subprocess.call (FileName) '이라고 부릅니다. 이전에 파일 권한을 설정했기 때문에'os.chmod (FileName, 0o755)'로 실행 가능하도록했습니다. 내가 알아챈 한가지는 열기, 저장 및 닫기입니다. vi는 파일 ​​크기 (492 - 493 바이트)에 1 바이트를 추가합니다. 이것이 중요한지 또는이 여분의 바이트가 추가되고 있는지 나는 모른다. – 218

+1

두 파일을 한 바이트 씩 비교하여 다른 파일을 볼 수 있습니다. * 줄 바꿈 *은 이에 해당합니까? 유니 코드 대 ascii? – wwii

답변

0

경우 이것은 내가 xxd을 사용하는 데 유용합니다 (위의 의견 제안, http://linuxcommand.org/man_pages/xxd1.html) 모두 스크립트 파일, 하나는 파이썬에서 생성 한

xxd script.txt output.txt 

I를 16 진수, 수동으로 기록을 변환하는 두 파일의 출력을 diff과 비교하여 파일 끝에 16 진수로 된 0a 문자를 볼 수있었습니다. 이것은 개행 문자에 해당합니다. 여기서 Why should text files end with a newline?과 여기에 VIM Disable Automatic Newline At End Of File과 같이, vi은 파일의 끝에 개행 문자가 없으면 추가합니다. 이것은 스크립트 실행을 가능하게합니다. 끝에 파이썬 스크립트에 포함되지 않은 개행 문자가 없으면 스크립트가 실행되지 않습니다.

관련 문제