LINUX.ORG.RU

Вызвать скрипт на bash из Python и дождаться его завершения

 ,


0

2

Здравствуйте!

У меня есть скрипт на Питоне, который запускает некий bash скрипт, который создает на диске некоторые файлы. Задача в том, чтобы Питон выполнял код написанный после блока запуска скрипты уже после того, как отработает скрипт bash. Как это можно реализовать? Есть ли стандартное решение?

Кстати заодно спрошу тут: если я вызываю процесс через subprocess.Popen и собираю его вывод через communicate(), это гарантирует, что Питон дождётся конца выполнения этого процесса, прежде чем пойдёт дальше в выполнении?

Deleted
()
Ответ на: комментарий от Deleted

Если тебе нужен только выхлоп процесса, то можно использовать .check_output.

Yorween
()
 
command = '/etc/scripts/init.sh'
os.system(command)

Подскажите если не сложно. Так вызывается скрипт. Куда тут нужно добавить. wait?

knigolaz
() автор топика
Ответ на: комментарий от knigolaz

Ну что ты как маленький?

os.system(command)

Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations. Changes to sys.stdin, etc. are not reflected in the environment of the executed command. If command generates any output, it will be sent to the interpreter standard output stream.

On Unix, the return value is the exit status of the process encoded in the format specified for wait(). Note that POSIX does not specify the meaning of the return value of the C system() function, so the return value of the Python function is system-dependent.

On Windows, the return value is that returned by the system shell after running command. The shell is given by the Windows environment variable COMSPEC: it is usually cmd.exe, which returns the exit status of the command run; on systems using a non-native shell, consult your shell documentation.

The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function. See the Replacing Older Functions with the subprocess Module section in the subprocess documentation for some helpful recipes.

cipher ★★★★★
()
Ответ на: комментарий от knigolaz

os.system() возвращает код завершения процесса, а значит он дожидается завершения выполнения скрипта.

xaizek ★★★★★
()
Ответ на: комментарий от Dred

Прочитал, даже весь. Там просто сказано - используйте subprocess. Практически мне это ничего не дало. Я тут пишу, ради человеческого ответа, но похоже зря.

knigolaz
() автор топика
Ответ на: комментарий от knigolaz

Ну так пора понять, что там написано, и осознать, что os.system() тебе не подходит (он вообще почти ни для чего не годится).

anonymous
()
Ответ на: комментарий от knigolaz

Практически мне это ничего не дало

Серьезно ? Тоесть в официальном доке написано, что нужно использовать другой способ, но это ничего не дало и нужно продолжать живать кактус ? Ну ок

https://docs.python.org/3/library/subprocess.html#subprocess.Popen.wait

Dred ★★★★★
()
Ответ на: комментарий от knigolaz

Я тут пишу, ради человеческого ответа

Я тебе привёл очень человеческий ответ - выжимку из документации. Могу, конечно, разжевать и пересказать своими словами, но зачем?

cipher ★★★★★
()

Можно так

subprocess.call('script.sh')

Этот вызов будет ждать выполнения вызваного процеса и вернет код завершения, эт если ненада выхлоп скрипта.

Random_M
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.