Python как "пакетный" скрипт (т.е. запускать команды из python)

Я работаю в среде Windows (на моем ноутбуке!), И мне нужна пара сценариев, которые запускают другие программы, почти как пакетный файл Windows.

как я могу запустить команду из Python, чтобы программа при запуске заменила скрипт? Программа является интерактивной (например, в унисон) и постоянно печатает строки и запрашивает ввод пользователя.

Итак, просто запустить программу и распечатать результат будет недостаточно. Программа должна взять на себя ввод / вывод сценария, что очень похоже на запуск команды из файла .bat.

Я пробовал os.execl, но он продолжает говорить мне «недопустимые аргументы», а также не находит имя программы (не ищет переменную PATH); Я должен указать ему полный путь ..?!

в основном, в пакетном скрипте я могу написать: унисонный профиль

как я могу добиться того же эффекта в Python?

Обновлено:

Я узнал, что это можно сделать с помощью os.system( ... ), и, поскольку я не могу принять свой ответ, закрываю вопрос.


Обновлено: это должен был быть комментарий, но когда я его опубликовал, у меня не было особого смысла.

Спасибо, Клаудиу, это почти то, что я хочу, за исключением небольшого момента: я хочу, чтобы функция завершалась, когда программа завершается, но когда я пробую ее в унисон, она возвращает управление не скрипту python, а окнам. среда командной строки

>>> os.execlp("unison")

C:\>Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]

For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

C:\>
C:\>
C:\>

как это обойти?

Это помогает предоставить сценарий, который не работает.

S.Lott 23.11.2008 02:53

Нет необходимости закрывать вопрос, потому что вы не можете принять свой ответ. Если он получил наибольшее количество голосов, то он в основном такой же, как и принятый ... Признаться, немного раздражает, но закрытие - неправильный путь, я бы сказал ...

dbr 27.12.2008 06:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
12
2
19 005
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы должны создать новый процесс, используя модуль подпроцесса.

Я плохо разбираюсь в процессах Windows, но его функция Popen является кроссплатформенной, и ее следует предпочесть решениям для ОС.

Обновлено: Я утверждаю, что вы должны предпочесть модуль Subprocess для функций, специфичных для ОС *, он кроссплатформенный и более питонический (просто погуглите). Результат можно легко дождаться, и чисто:

import os
import subprocess
unison = os.path.join(os.path.curdir, "unison")
p = subprocess.Popen(unison)
p.wait()

Извини, это моя вина. Я был уверен, что подпроцесс не подключит STDIN / STDOUT при таком использовании. Очевидно, теперь уже слишком поздно отменить мой голос.

Brian C. Lane 23.11.2008 02:15

os.execlp должен работать. Это будет искать команду на вашем пути. Не давайте ему никаких аргументов, если они не нужны:

>>> import os
>>> os.execlp("cmd")

D:\Documents and Settings\Claudiu>Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

D:\Documents and Settings\Claudiu>

следует использовать модуль subprocess

orip 23.11.2008 02:45
import subprocess

proc = subprocess.Popen(['unison', 'profile'], stderr=subprocess.PIPE,      
                        stdout=subprocess.PIPE, stdin=subprocess.PIPE)

proc.stdin.write('user input')
print proc.stdout.read()

Это должно помочь вам начать работу. Пожалуйста, отредактируйте свой вопрос, указав больше информации, если вы хотите получить более подробный ответ!

Ответ принят как подходящий

Я узнал, что os.system делает то, что я хочу,

Спасибо за все, что пытались помочь.

os.system("dir")

выполняет команду так же, как если бы она была запущена из командного файла

Другие вопросы по теме