Python 如何创建自己的控制台,如windows命令提示符

Python 如何创建自己的控制台,如windows命令提示符,python,python-3.x,subprocess,pycharm,pyqt5,Python,Python 3.x,Subprocess,Pycharm,Pyqt5,正如你在PyCharm中看到的, 最先进的控制台,我正在尝试制作一个 请告诉我怎么做 我知道子流程模块在这种情况下非常方便 我有一个名为add.exe的exe文件 该add.exe文件的Python 3x代码将为 a = input('Enter 1st Number') b = input('Enter 2nd Number') print('a + b =', a + b) 现在,当我使用subprocess在后台运行它并获取输出,然后提供输入时,我只得到一个黑色的空控制台屏幕。 哦这看起

正如你在PyCharm中看到的, 最先进的控制台,我正在尝试制作一个 请告诉我怎么做

我知道子流程模块在这种情况下非常方便

我有一个名为add.exe的exe文件 该add.exe文件的Python 3x代码将为

a = input('Enter 1st Number')
b = input('Enter 2nd Number')
print('a + b =', a + b)
现在,当我使用subprocess在后台运行它并获取输出,然后提供输入时,我只得到一个黑色的空控制台屏幕。 哦这看起来很难看

我只想在程序需要输入时获取输出并得到提示,但是 不打开控制台 到目前为止,我的代码是

from subprocess import Popen, PIPE
p = Popen(['add.exe'],
          stdout=PIPE,
          stdin=PIPE,
          )
p.stdin.write(b'4')
p.stdin.write(b'6')
print(p.stdout.read())
然后我得到那个愚蠢的控制台 当我关闭控制台时,我得到空闲的输出

b'输入第一个号码:'

我该怎么办!! 有人请帮忙。

console.py

#!/usr/bin/env python3

from subprocess import check_output, PIPE

commands = ['add.exe', 'sub.exe', 'print', 'exit', 'quit']

# Only commands with a set number of arguments
num_cmd_args = {
    'add.exe': 2,
    'sub.exe': 2
}

# Command help messages
cmd_helps = {
    'add.exe': 'Adds 2 numbers together. Returns num1 + num2',
    'sub.exe': 'Subtracts 2 numbers. Returns num1 - num2',
    'print': 'Prints all arguments passed'
}

while True:
    user_in = input('$ ').split()
    cmd = user_in[0]
    args = user_in[1:]
    # Default to '*' if not cmd not found in num_cmd_args
    n_args_needed = num_cmd_args.get(cmd, '*')

    # Check cmd
    if cmd not in commands:
        print('command not found:', cmd)
        continue
    elif cmd in ('exit', 'quit'):
        break

    # To make this much better, you're probably going to want to
    #  do some type checking to make sure that the user entered
    #  numbers for commands like add.exe and sub.exe. I suggest
    #  also looking at word splitting and maybe escaping special
    #  characters like \x07b or \u252c.

    # Check cmd's args
    if n_args_needed != len(args):
        print(cmd_helps[cmd])
    elif n_args_needed in ('*', num_cmd_args[cmd]):
        out = check_output(['./'+cmd, *args])
        print(out.decode(), end='')

这是我的C++文件:

add.cpp

#include <iostream>
using namespace std;

int main(int argc, char** argv) {
    cout << atoi(argv[1]) + atoi(argv[2]) << endl;
    return 0;
}
sub.cpp

#include <iostream>
using namespace std;

int main(int argc, char** argv) {
    cout << atoi(argv[1]) - atoi(argv[2]) << endl;
    return 0;
}
print.cpp

#include <iostream>
using namespace std;

int main(int argc, char** argv) {
    for (int i=1; i<argc; i++)
        cout << argv[i] << endl;
    return 0;
}

兄弟,我明白了,但正如你所看到的,我正在尝试创建另一个类似于pycharm的控制台,这样可执行文件可能包含不同类型的输入或输出消息,所以请修改程序,以便它可以删除控制台消息,并在需要时提示我输入,然后再次显示结果输出。@Nikhil这就是问题所在除此之外,除非程序有帮助消息选项(例如add.exe/?),否则无法知道程序需要什么类型的输入。即使是这样,您也必须进行一些相当复杂的解析,以了解帮助消息告诉您程序需要什么样的输入。为了你想要的,您必须对逻辑进行编码,以便能够处理用户可能尝试运行的每个程序的输入。如果我将此代码放入while循环p.stdout.read1中会怎么样?如果我这样做,则会出现一个问题,一旦光标在控制台中触到结束字符,程序将永远运行,除非我提供输入,但问题是它会挂起并停止那么,使用此代码无法提供任何类型的输入打印'some input',file=p.stdin请帮助…当我说我的代码将挂起时,我的意思是代码将等待,直到程序退出或我提供所有需要的输入,这意味着它正在等待EOF。@Nikhil让可执行文件读取任何类型的输入的唯一方法是在Popen调用中传递它,就像我在示例中所做的那样。如果您可以使用p.stdin或print…,file=p.stdin使其工作,那太棒了,但是您仍然需要知道程序需要什么类型的输入,并将该逻辑编码到术语emulator中。