Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 执行cmd/shell命令-从cmd/shell获取输出-对输出运行函数-并在同一cmd/shell会话中执行答案_Python_Shell_Cmd_Subprocess - Fatal编程技术网

Python 执行cmd/shell命令-从cmd/shell获取输出-对输出运行函数-并在同一cmd/shell会话中执行答案

Python 执行cmd/shell命令-从cmd/shell获取输出-对输出运行函数-并在同一cmd/shell会话中执行答案,python,shell,cmd,subprocess,Python,Shell,Cmd,Subprocess,提前感谢任何能提供帮助的人 流量: 1-在cmd或shell中执行命令#成功完成 2-从命令获得输出#成功完成 3-通过某个函数运行输出#成功完成 4-将答案执行回同一个cmd/shell会话#这就是我失败的地方 5-获取第二个命令的输出#这就是我失败的地方 这就是我目前所拥有的 with Popen("COMMAND", stdout=PIPE, bufsize=1, shell=True, universal_newlines=True) as p: for line in p.std

提前感谢任何能提供帮助的人

流量:

1-在cmd或shell中执行命令#成功完成

2-从命令获得输出#成功完成

3-通过某个函数运行输出#成功完成

4-将答案执行回同一个cmd/shell会话#这就是我失败的地方

5-获取第二个命令的输出#这就是我失败的地方

这就是我目前所拥有的

with Popen("COMMAND", stdout=PIPE, bufsize=1, shell=True, universal_newlines=True) as p:
   for line in p.stdout:
      expression+=line
  result = ## some function returning var "result"
试过下面的代码 试过这个 我也试过这个 这个呢 他们都不工作
还尝试了pexpect-更糟糕

您可能不想这样做。这当然是可能的,但您必须处理缓冲和各种微妙的问题。你为什么要这样做?特别是,为什么您需要在
cmd
中运行命令,为什么第二个命令需要在同一个
cmd
进程中运行?因此,您的第一个cmd将第二个cmd打印为字符串?@chrisam是的,第二个cmd将打印一个字符串,该字符串位于第一个命令的输出中cmd@SvenMarnach它连接到远程计算机,远程计算机在第一个命令后会说些什么,我需要用第一个命令输出中的文本进行响应,在第二个命令后,我需要再次获取输出。简单解释如下:1-运行命令2-获取输出3-运行命令(在同一个cmd/shell/terminal会话中)4-重新绘制输出这不是您使用
shell=True
时要做的事情。您没有通过
cmd/c
运行单个命令。直接运行cmd.exe需要一个交互式shell,所有3个标准句柄都重定向到管道。cmd本身可以像这样工作,但是如果您运行外部程序,它们可能会在stdout或disable interactive模式下使用完全缓冲,因为管道不是tty——除非它们有命令行选项,比如Python的-i(强制交互)和-u(禁用缓冲)。
  out = p.communicate(input=result)[0]
  print (out)
  out , errs = p.communicate(input=result)
  print (exp)
  print (out)
  print (p.communicate(input=result)[0])