2014-01-02 3 views
-2

Как мне передать текст программы в формате python как вход в другой процесс? В частности, командная оболочка, а не командная строка!Как заставить программу python дать команду командной оболочке?

Не работает как

example.exe --doSomething -i random.txt -o random1.txt 

но

example.exe 
# example shell loading 
# and then in loaded shell 
> doSomething -i random.txt -o random1.txt 

отредактированное сообщение:

Как сделать программу питона пройти вход в другое окно, в командной строке? Я хочу, чтобы это сделать:

something = raw_input('Waddaya wanna do?') 
if something == 'Halt!': 
     placeholder('exit') 
if something == 'Get help!': 
     placeholder('help %COMMAND%') 

заполнитель() выступает за команду, которая будет проходить то, что в скобках в командной оболочке. I. E. Если processname = java.exe, он передаст 'exit' в 'java.exe.'

+0

О, Кстати, оболочка командной строки - это java. –

+0

Возможный дубликат [Использовать программу Python для ввода текста в командную строку Java] (http://stackoverflow.com/questions/20887408/use-a-python-program-to-input-text-to-a-java -command-prompt) – Hyperboreus

+1

Пожалуйста, не реконструируйте свои собственные вопросы. – Hyperboreus

ответ

0

Кажется, вы ищете для subprocess.popen, увидеть пример в tutorial:

Запись процесса может быть сделано в очень похожим образом. Если мы хотим отправить данные в stdin процесса, нам нужно создать объект Popen с помощью stdin = subprocess.PIPE. Чтобы проверить это, давайте другую программу (write_to_stdin.py), который просто печатает Received: и затем повторяет сообщение мы посылаем его:

# write_to_stdin.py 
import sys 
input = sys.stdin.read() 
sys.stdout.write('Received: %s'%input) 

Чтобы отправить сообщение стандартный ввод, мы передаем строку, которую мы хотим отправить как входной аргумент для связи():

>>> proc = subprocess.Popen(['python', 'write_to_stdin.py'], stdin=subprocess.PIPE) 
>>> proc.communicate('Hello?') 
Received: Hello?(None, None) 
0

Основная суть в том, вы хотите использовать subprocess и передать в аргументе и стандартного ввода аргументов в STDOUT и STDERR как ТРУБЫ.

p = subprocess.Popen(args, *, 
         stdout=subprocess.PIPE, 
         stdin=subprocess.PIPE) 

Это позволяет использовать р для отправки и получения сообщений подпроцесса:

p.stdin.write('Some input\n') 
... 
x = p.stdout.readline() 
... 

Вот некоторые хорошие примеры:

read subprocess stdout line by line

Python - How do I pass a string into subprocess.Popen (using the stdin argument)?

Смежные вопросы