代码之家  ›  专栏  ›  技术社区  ›  Furkan Aydoğan

运行。Python 3空闲的sh文件

  •  0
  • Furkan Aydoğan  · 技术社区  · 7 年前

    我正在尝试用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)
    

    但它不起作用。。。

    1 回复  |  直到 7 年前
        1
  •  2
  •   hunteke    7 年前

    这无疑是一个权限问题。为了能够“直接”执行文件(“点斜杠”)- ./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
    

    有了执行位集,就可以使用“点斜杠”构造。

    然而,我怀疑你是否想执行 chmod 从你的脚本中,所以相反,告诉你的脚本 真实的 要运行的程序 step.sh sh

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

    或者在您的示例中,直接转到sudo:

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

    注意,如果您很健壮,我可能会考虑添加一些绝对路径,或者确保设置了PATH变量。然而,问题的关键是对“可执行”含义的误解。