通过python中的子进程使文件可执行

时间:2019-04-16 18:43:32

标签: python bash subprocess

我正在尝试通过python程序使bash文件可执行。现在看起来像这样:

p = subprocess.Popen(chmod u+x, bashName)

bashName是我正在执行的bash文件的名称,并且收到错误消息:

  

FileNotFoundError:[错误2]没有这样的文件或目录:'chmod u + x        / home / ##### / Desktop / music / addSong / bashFileName'

我已经尝试过了,但情况没有改善

subprocess.call('chmod u+x /home/stoplight25/Desktop/music/addSong/'+bashName)

我尝试阅读subprocess上的文档,但这超出了我的理解范围。有人可以解释如何使用subprocess使文件可执行。

预期:

  • 用正确的内容和名称制作一个新的bash文件,使其可执行

结果:

  • 具有正确内容和名称但不能执行的bash文件。

2 个答案:

答案 0 :(得分:1)

您必须将参数作为 list 传递,而不是作为字符串,或者python尝试将带有空格和args的整个字符串和所有参数作为可执行文件传递给系统(或使用{{1 }},我不建议这样做。还要检查返回码,以防万一:

shell=True

或者您可以使用纯python来访问文件权限(获取文件当前权限,添加用户执行掩码,应用subprocess.check_call(['chmod','u+x','/home/stoplight25/Desktop/music/addSong/'+bashName]) ):

os.chmod

答案 1 :(得分:0)

这应该有效:

import subprocess
command = 'chmod u+x /home/stoplight25/Desktop/music/addSong/' + bashName
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
output, error = process.communicate()