我正在尝试使用python 3运行sh文件。我的.sh文件将在终端上运行。我的操作系统是Raspbian。我尝试了那段代码:
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 :(得分:1)
毫无疑问是权限问题。为了能够"直接"执行一个文件(la"点斜杠" - ./yourfile
),有问题的文件需要"执行bit"组。尝试使用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
设置执行位后,您可以使用"点斜杠"构造
但是,我怀疑你想从你的脚本中执行chmod
,所以请告诉你的脚本你要运行的{em>实际程序step.sh
,即{{ 1}}:
sh
或者在您的示例的简单情况下,只需直接转到sudo:
shellscript=subprocess.Popen(['sh', './step1.sh'], stdin=subprocess.PIPE)
请注意,如果您是健壮的,我可能会考虑添加一些绝对路径,或者确保设置PATH变量。然而,问题的关键在于误解了可执行文件'装置