создание исполняемого файла через подпроцесс в python - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь сделать исполняемый файл bash через программу на python. Прямо сейчас это выглядит так:

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

bashName имя файла bash, который я делаю исполняемым, и я получаю сообщение об ошибке:

FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'chmod u + x / Главная / ##### / Desktop / музыка / addSong / bashFileName '

Я попробовал это, и это не получилось лучше

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

Я пытался прочитать документацию по subprocess, но это немного за пределами моего понимания. Может кто-нибудь объяснить, как сделать файл исполняемым с subprocess.

Ожидаемый:

  • создайте новый bash-файл с правильным содержимым и именем, сделайте его исполняемым

Результат:

  • файл bash с правильным содержимым и именем, но не исполняемый.

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Вы должны передать аргументы как список , а не как строка или python пытается передать всю строку с пробелами & args & all в систему как исполняемый файл (или используйте shell=True, который Я не рекомендую) Также проверьте код возврата на всякий случай:

subprocess.check_call(['chmod','u+x','/home/stoplight25/Desktop/music/addSong/'+bashName])

Или вы можете использовать чистый python для доступа к разрешениям файла (получить текущие разрешения для файла, добавить маску выполнения пользователя, применить os.chmod):

import os

my_file = os.path.join('/home/stoplight25/Desktop/music/addSong',bashName)
new_mode = os.stat(my_file).st_mode | 0o100
os.chmod(my_file,new_mode)
0 голосов
/ 16 апреля 2019

Это должно работать:

import subprocess
command = 'chmod u+x /home/stoplight25/Desktop/music/addSong/' + bashName
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...