2016-06-03 2 views
1

이상한 문제를 해결하기위한 단서 또는 해결책을 찾고 있습니다.import : python에서 명령어를 찾을 수 없습니다. 3.5

[sc-d02-087-017:~]$ cat mytest.py 
#!/build/toolchain/lin64/python-3.5.1/bin/python 
import platform, sys 
print(platform.system()) 
sys.exit(0) 

내가 쉘 실행 파일과 내 테스트 프로그램을 실행하기 위해 노력하고있어,하지만이 자사의 파이썬 프로그램이 주어진 /build/toolchain/lin64/python-3.5.1/bin/에 의해 해석하는 것을 인식하지 쉘을 파이썬 대신 err을 던집니다.

[sc-d02-087-017:~]$ ./mytest.py 
./mytest.py: line 2: import: command not found 
./mytest.py: line 3: syntax error near unexpected token `platform.system' 
./mytest.py: line 3: `print(platform.system())' 

그러나이 의견 요청으로

[sc-d02-087-017:~]$ /build/toolchain/lin64/python-3.5.1/bin/python -c 'import platform, sys;print(platform.system());' 
Linux 

내 컴퓨터가 64 아치

[sc-d02-087-017:~]$ uname -a 
Linux sc-d02-087-017 2.6.18-308.8.1.el5 #1 SMP Tue May 29 14:57:25 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux 

를 기반 및/또는 명령 줄로 파이썬 프롬프트 예상 작품과 같이

[sc-d02-087-017:~]$ xxd mytest.py | head 
0000000: 2321 2f62 7569 6c64 2f74 6f6f 6c63 6861 #!/build/toolcha 
0000010: 696e 2f6c 696e 3634 2f70 7974 686f 6e2d in/lin64/python- 
0000020: 332e 352e 312f 6269 6e2f 7079 7468 6f6e 3.5.1/bin/python 
0000030: 332e 350a 696d 706f 7274 2070 6c61 7466 3.5.import platf 
0000040: 6f72 6d2c 2073 7973 0a70 7269 6e74 2870 orm, sys.print(p 
0000050: 6c61 7466 6f72 6d2e 7379 7374 656d 2829 latform.system() 
0000060: 290a 7379 732e 6578 6974 2830 290a  ).sys.exit(0). 

[sc-d02-087-017:~]$ ls -l mytest.py 
-rwxr-xr-x 1 mmopuru mts 110 Jun 2 17:23 mytest.py 
+0

'/ build/toolchain/lin64/python-3.5.1/bin/python'을 확인하십시오. –

+0

무엇을 확인 하시겠습니까? 존재인가? 그것은 왜 프롬프트가 작동하는지에 대한 것입니다. –

+0

[sc-d02-087-017 : ~] $ xxd mytest.py | 머리 0000000 :! 2321 2f62 7569 6c64 2f74 6f6f 6c63 6861 #/구축/toolcha 0,000,010 :/lin64에서 696e 2f6c의 696e 3634 2f70 7974 686f 6e2d/python- 0,000,020 : 332e 352e 312f 6269 6e2f 7079 7468 6f6e 3.5.1/빈/파이썬 0,000,030 : 332e 350A 696d 706f 7274 2070 7466 6c61 3.5.import의 platf 0,000,040 : 6f72 6d2c 2,073 7,973 7,269 0a70 6e74 2,870 ORM, sys.print (p 0,000,050 : 7466 6c61 6f72 6d2e 7,379 7,374 2,829 656d latform.system() 0000060 : 290a 7379 732e 6578 6974 2830 290a) .sys.exit (0). –

답변

2

알고 계신 것처럼, 파이썬 스크립트가 쉘 스크립트로 직접 해석되기 때문에 오류 메시지가 표시됩니다.

보통 "풋"라인이 없을 때 발생합니다 (!#/path/to/python/executable). 이것이 적용되지 않기 때문에 조금 더 세게 보았는데 xxd 출력이 cat 출력과 일치하지 않는 것으로 나타났습니다. 특히 이 xxd 출력에 나타납니다. 귀하의 shebang 라인이 부정확하고 실제적으로 생각한/존재하지 않는 파일을 가리키는 #!/build/toolchain/lin64/python-3.5.1/bin/python3.5을 읽습니다. 따라서 파일이 쉘 스크립트로 해석되므로 사용자가 보는 오류입니다.

그러나 내가 좋아하는 오류를 제공하기 위해 존재하지 않는 파일을 기대 :

난 당신 오류가 #!을한다는 점에서,보다 더 미묘한 경우 궁금해 때문에
bad interpreter: No such file or directory 

선은 당신이 생각하는 다른 곳을 가리키고 있지만 여전히 유효한 실행 파일을 가리키고 있습니다.

N.B. 그 다음 거의 확실하게 문제/오타가

/build/toolchain/lin64/python-3.5.1/bin/python -c 'import platform, sys;print(platform.system());' 

와 동일하게 작동하는 경우 귀하의 질문에 나타나지 않습니다 % 당신이 할 수있는 테스트,하지만

/build/toolchain/lin64/python-3.5.1/bin/python ./mytest.py 

를 실행하는 것입니다 #! 행.

-2

나는 가지고 있지 않습니다. 왜 ./을 사용했는지 생각해보십시오.

은 다음과 같이 파이썬 스크립트를 실행합니다

python mytest.py  # and then just hit enter. 

를 그 다음 날 알려 작동하지 않는 경우.

+1

OP는 왜 ./가 작동하지 않는지 알고 싶어합니다. 그는 첫 번째 줄에 #!로 통역관을 지정했습니다. 따라서 스크립트는 ./을 사용하여 호출 될 때 파이썬에서 자동으로 프로그램을 실행해야합니다. 그가 파이썬 mytest.py를 사용한다면 이것은 명시 적으로 파이썬 인터프리터를 호출 할 것이고 첫 번째 라인은 중복된다. – AK47

0

파이썬 3 파일을 UTF8 (예 : UTF16)과 다른 인코딩으로 저장하면 다양한 문제가 발생하므로 문제가 될 것으로 생각됩니다. 그것을 "정상적인"인코딩 (UTF8)으로 저장했는지 확인하고 아마도 그것을 고칠 것입니다!

만약 그렇다면 "문제"는 python3이 인코딩 된 파일을 다르게 지원한다고 생각합니다. bash는 그렇지 않습니다 :-).

0

고객님의 시스템에 맞는 고객님의 라인은 too long 일 수 있습니다. 그것을 단축하십시오.

ln -s /build/toolchain/lin64/python-3.5.1 /tmp/xyz 

#!/tmp/xyz/bin/python에 오두막 라인을 변경 : 예를 들어, /build/toolchain/lin64/python-3.5.1에 심볼릭 링크를 만듭니다. 문제가 해결되면 Python 빌드를 참조하는보다 적절한 짧은 방법을 선택할 수 있습니다.

0

해당 경로를 사용자 프로필에 추가하려고 시도하십시오. /build/toolchain/lin64/python-3.5.1/bin/python & 실행 경로 파일. 사용하는 쉘에서 .bash_profile 또는 depening을 실행 한 다음 사용자를 동일한 로그인으로 전환하십시오. 또는 같은 프로필을 실행하십시오. ./bash_profile을 사용하고 스크립트로 긴장을 풀어보십시오 .... 도움이 되길 바랍니다

관련 문제