Python - 在控制台中进行交互式脚本执行的一种方法

时间:2015-01-08 01:01:26

标签: python django stdout stdin

我正在使用Django migrate / makemigrations命令的Web界面。我一直在检查代码,他们使用Python input()来获取questions的答案。

目前我尝试使用Python subprocess库来回答外部脚本(运行Python脚本的Python脚本)。

我已经生成了一个可用作测试的简单脚本:

sum.py

first_number = input("Welcome to the program that sum two numbers, \
please give me the first number: ")
second_number = input("Now, please give me the second number: ")
print("Congratulations, the result of the sum of %s and %s is: %s" % 
      (first_number, second_number, (first_number + second_number)))

我发现制作脚本的唯一方法是运行第一个脚本:

from subprocess import Popen, PIPE

command = ["python", "sum.py"]
p = Popen(command, stdin=PIPE, stdout=PIPE)
p.stdin.write("1\n")
p.stdin.write("2\n")
print p.communicate()[0]

我几天前在互联网上找到了一些代码,可以像stdout一样实时收到ping:

from subprocess import Popen, PIPE

command = ["ping", "192.168.1.137"]
p = Popen(command, stdout=PIPE, stdin=PIPE, )
while p.poll() is None:
    print p.stdout.readline()

我修改了代码并尝试运行脚本:

来自192.168.1.137的64个字节:icmp_seq = 7 ttl = 64 time = 1.655 ms 来自子进程导入Popen,PIPE

command = ["python", "suma.py"]
p = Popen(command, stdout=PIPE, stdin=PIPE, )
response = "1\n"
while p.poll() is None:
    print p.stdout.readline() #Obtain the message
    p.stdin.write(response) #Answer the question

我已经找到了一些可能的方法来使用websockets和node.js,例如tty.jsweb-console,但由于我对编程语言不太了解,因此可能很难保留。< / p>

我发现从stdout接收并向HTML页面发送消息并从用户那里获得响应。

我有点迷失,任何建议都将受到赞赏。 感谢。

0 个答案:

没有答案