Saya mencoba menjalankan file sh dengan python 3. File .sh saya akan berfungsi di Terminal. Sistem operasi saya adalah Raspbian. Saya mencoba kode itu:

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)

Tapi tidak berhasil...

0
Furkan Aydoğan 14 November 2017, 04:45

1 menjawab

Jawaban Terbaik

Tidak diragukan lagi ini adalah masalah izin. Agar dapat "secara langsung" mengeksekusi file (ala "dot slash" - ./yourfile), file tersebut memerlukan set "execute bit". Coba gunakan ls -l untuk melihat file yang baru saja Anda buat dengan skrip Anda. Saya berani bertaruh file tersebut tidak memiliki bit eksekusi:

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

Perhatikan kurangnya x di kolom pertama itu. Anda mungkin chmod untuk menambahkan bit eksekusi:

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

Dengan set bit eksekusi, Anda kemudian dapat menggunakan konstruksi "dot slash".

Namun, saya ragu Anda ingin menjalankan chmod dari dalam skrip Anda, jadi alih-alih beri tahu skrip Anda program aktual yang ingin Anda jalankan step.sh, yaitu, sh :

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

Atau dalam kasus sederhana dari contoh Anda, langsung saja ke Sudo:

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

Perhatikan bahwa jika Anda kuat, saya mungkin mempertimbangkan untuk menambahkan beberapa jalur absolut, atau memastikan variabel PATH Anda disetel. Namun kunci masalah Anda adalah kesalahpahaman tentang apa arti 'dapat dieksekusi'.

1
hunteke 14 November 2017, 01:56