2015-06-17 3 views
-3

Я пытаюсь сделать программу Python, которая может автоматически исправить экзамены, у меня есть дополнительное время и не хочу дождаться, когда мой учитель исправит их вручную ... Annyways, когда я использую python argv like это:Python argv и cmd

import sys 

def hello(a): 
    print(a) 

a = sys.argv[1:] 
hello(a) 

и я хочу, чтобы вставить список, я больше не могу вставить только один переменный из-за способом ARGV работ, и я не могу знать, как долго этот список будет, потому что не все задачи являются одна и та же. Я использую subprocess.check_output, чтобы вернуть выход программы после того, как моя контрольная панель запускает ее в CMD-окне ... Теперь, если кто-то знает лучший способ приблизиться к исправлению программ, не заставляя студентов заменить их вход sys.argv (если там является лучшим способом ввода аргументов в отдельную программу python при запуске) или может сказать мне, как исправить проблему argv?

+1

Что вы подразумеваете под «вставкой списка»? Вставить туда? –

+1

Вы вызываете * еще один скрипт Python * с 'subprocess'? Почему бы просто не «импортировать» его и использовать функции напрямую? – jonrsharpe

+0

@BryanOakley есть 2 программы, программа-корректор и фиктивная тестовая программа, которые я написал выше, нужно сделать мой корректор для выполнения вышеуказанной программы в windows cmd с аргументами, которые необходимы программе ... – simon101

ответ

1

Вы можете использовать Popen.communicate вместо check_output:

echo.py:

print(input()) 

test.py:

from subprocess import Popen, PIPE 
p = Popen(['python3', 'echo.py'], stdout=PIPE, stdin=PIPE, stderr=PIPE) 
out, err = p.communicate(input="hello!".encode()) 
assert out.decode().strip() == "hello!" 
+0

Я посмотрю, спасибо! – simon101

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