Есть ли способ передать значения для ввода приглашения в сценарий python, который был вызван другим сценарием python? - PullRequest
4 голосов
/ 13 июля 2020

Для лучшего понимания

example2.py

    a = raw_input("Enter 1st number: ")
    b = raw_input("Enter 2nd number: ")
    *some code here*
    c = raw_input("Enter 3rd number: ")
    s = a+b+c
    print(s)

example1.py

    import os
    os.system('python example2.py')
    <need logic to address the input prompts in example2.py>
    <something to pass like **python example2.py 1 2 3**>

I угадайте, посмотрев на эти скрипты, вы сможете получить то, что я ищу? Позвольте мне объяснить это один раз для лучшего понимания. Есть два файла example1.py и example2.py. Теперь я вызвал example1.py из своей оболочки, которая, в свою очередь, вызвала другой скрипт и ожидала ввода.

Примечания:

  • Я ничего не могу сделать с example2.py, который не принадлежит мне.
  • Я ограничен, чтобы вносить изменения в example1.py и передавать аргументы example1.py
  • Я знаю, что будет создан процесс для example2.py, но не уверен в передаче этих аргументов в процесс ввода-вывода.
  • Фактический код был другим, я создал example1.py и example2.py для понимания.

Я не мог 't gr asp любые идеи из этих ссылок:

Запустить python скрипт из другого скрипта с параметрами в аргументе подпроцесса

как выполнить файл сценария python с аргументом из другого файла сценария python

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

Ответы [ 3 ]

2 голосов
/ 13 июля 2020

Рассмотрим файл для запуска:

a = int(input("Enter 1st number: "))
b = int(input("Enter 2nd number: "))
# code
c = int(input("Enter 3rd number: "))
s = a+b+c
print(s)

Вы можете запустить этот файл из python с помощью модуля subprocess.

import subprocess

proc = subprocess.Popen(['python', 'a.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, _ = proc.communicate(bytes("1\n2\n3\n", "utf-8"))
print(out.decode('utf-8'))

Который приводит к:

Enter 1st number: Enter 2nd number: Enter 3rd number: 6

Подробнее читайте в документации и примерах здесь .

Я обновил код до python3, поскольку python2 - EOL .

PS: Я использовал shell=True здесь для удобства, но вы, вероятно, не должны

1 голос
/ 13 июля 2020

Начиная с Python 3, raw_input () был переименован в input ().

вы можете использовать int (input ()) в примере 2

0 голосов
/ 13 июля 2020

Один простой способ - использовать стандартный вывод из одного скрипта для передачи значений в другой. Вот пример использования python, вертикальной черты "|" команда и стандартный вывод. Команда pipe перенаправляет вывод из файла и использует его как ввод для следующего файла в цепочке

python example1.py | example2.py

Вывод из кода:

Enter 1st number: number is 1
Enter 2nd number: number is 2

example1.py code:

print(1)
print(2)

Код example2.py:

a = input("Enter 1st number: ")
print("number is",a)

b = input("Enter 2nd number: ")
print("number is",b)

Ссылка: https://www.geeksforgeeks.org/piping-in-unix-or-linux/

...