2017-11-14 2 views
0

파이썬 3에서 sh 파일을 실행하려고합니다. 내 .sh 파일이 터미널에서 작동합니다. 내 운영 체제는 Raspbian입니다. 그 코드를 시도 :Python 3에서 .sh 파일을 실행 Idle

import time 
import os 
import subprocess 

# STEP 1 
text='sudo somecode' 
savefile=open('step1.sh','w') 
savefile.write(text) 
savefile.close() 
time.sleep(2) 

shellscript=subprocess.Popen(['./step1.sh'], stdin=subprocess.PIPE) 

을하지만하지

+0

먼저'text = 'somecode'를 시도하십시오. ("sudo"제거) –

+0

@MadLee 추적 (최근 호출 마지막) : 파일 "/home/pi/shcreater.py", 줄 12, shellscript = subprocess.Popen ([ './ step1.sh' ], stdin = subprocess.PIPE) 파일 "/usr/lib/python3.5/subprocess.py", 676 줄, __init__ restore_signals, start_new_session) 파일 "/usr/lib/python3.5/subprocess.py ", 줄 1282, _execute_child에 raise child_exception_type (errno_num, err_msg) OSError : [Errno 8] Exec 형식 오류 –

답변

1

(가) 의심 할 여지없이 권한 문제입니다 ... 작동합니다. "직접"파일을 실행할 수있게하려면 ("점 슬래시"- ./yourfile) 문제의 파일에 "실행 비트"세트가 필요합니다. 방금 작성한 파일을 보려면 ls -l을 사용해보십시오. 나는 파일이 하지 않습니다 겠지 실행 비트가 :

$ ls -l ./step.sh 
-rw-r--r-- 1 furkan furkan 0 Nov 13 20:51 step.sh 

참고 첫 번째 열에서 x의 부족. 당신은 chmod 실행 비트 추가 할 수 있습니다 실행 비트 세트와

$ chmod +x ./step.sh 
$ ls -l ./step.sh 
-rwxr-xr-x 1 furkan furkan 0 Nov 13 20:51 step.sh 

를, 당신은 다음 "점 슬래시"를 사용할 수 있습니다 구성.

shellscript=subprocess.Popen(['sh', './step1.sh'], stdin=subprocess.PIPE) 

을 또는 간단한 경우 : 그러나

, 난 당신이, 당신은 즉 step.sh를 실행하려면 스크립트 sh실제 프로그램을 말 대신 스크립트 내에서 chmod을 실행, 그래서하려는 의심 당신이 강인한하는 경우

shellscript=subprocess.Popen(['sudo', 'yourexecutable'], stdin=subprocess.PIPE) 

, 나는 약간의 절대 경로를 추가하거나 보장 고려할 수 있음 : 귀하의 예제로, 단순히 sudo를로 직접 이동 PATH 변수가 설정됩니다. 그러나 문제의 열쇠는 '실행 가능'이란 무엇을 의미하는지에 대한 오해입니다.

+0

고맙습니다. 두 가지 질문을해도 될까요? 첫 번째 방법은 내 step1.sh를 자동으로 다른 방법으로 실행하는 방법입니다. 내 파이썬 프로그램을 시작한 후에 터미널을 볼 수있는 방법은 무엇입니까? –

+0

먼저 Google에 시도하고 직접 시도하고 직접 시도해 보는 것이 좋습니다. 둘째, 이들은 다른 사람들에게 잠재적으로 도움이되는 질문이므로, 여러분이 이미 만족할만한 대답을 찾지 못해서 더 많은 질문을 작성해 주시기 바랍니다. – hunteke