需要做哪些具体的语法修改或配置修改,才能使下面调用Python 3.7.7脚本的整个输出从 cmd.exe
在Windows 10中,将被输出到相同的单一的 CMD.exe
窗口?
下面的问题是,最底层的脚本( someCommand.py
)会触发它自己的控制台窗口,以启动它的输出,然后在它运行完毕后立即关闭,这样最低级别脚本( someCommand.py
)没有返回到 cmd.exe
调用它的控制台窗口。
下面是在命令中运行的 cmd.exe
窗口来调用高级脚本。
python topLevelScript.py "firstInputsPath" "secondInputsPath"
以下是内容 topLevelScript.py
print("Inside topLevelScript.py script.")
import sys
import sharedFunctions as sharedfunc
pathToInputs1 = str(sys.argv[1])
pathToInputs2 = str(sys.argv[2])
pathToCalls = "C:\\some\\path\\"
commandToCalls = "someCommand.py"
print ('pathToInputs1:', pathToInputs1 )
print ('pathToInputs2:', pathToInputs2 )
sharedfunc.applyFoundation(commandToCalls, pathToCalls, pathToInputs1, pathToInputs2)
sharedFunctions.py
位于同一目录下,与 topLevelScript.py
的目录,这也是调用到 topLevelScript.py
是由 cmd.exe
以上。 的内容。sharedFunctions.py
是。
import subprocess
def applyFoundation(scriptName, workingDir, inputs1Path, inputs2Path ):
print("Inside sharedFunctions.py script and applyFoundation(..., ...) function. ")
print ('inputs1Path:', inputs1Path )
print ('inputs2Path:', inputs2Path )
print("scriptName is: " +scriptName)
print("workingDir is: " +workingDir)
proc = subprocess.Popen( scriptName,cwd=workingDir,stdout=subprocess.PIPE, shell=True)
while True:
line = proc.stdout.readline()
if line:
thetext=line.decode('utf-8').rstrip('\r|\n')
decodedline=ansi_escape.sub('', thetext)
print(decodedline)
else:
break
以上所有的脚本都是以同样的方式来打印它的控制台输出。cmd.exe
窗口的输出,除了调用它的 subprocess.Popen(...)
命令,它启动了以下 someCommand.py
并将其输出打印在一个新的子程序中。cmd.exe
窗口,然后在不记录其任何输出的情况下迅速销毁。
print("Inside someCommand.py script. ")
import os
import subprocess
subprocess.run("some cli command", shell=True, check=True)
注意: someCommand.py
也位于与两个调用脚本不同的路径目录中,除了被 subprocess.Popen(...)
需要做哪些具体的改变,才能使来自于
someCommand.py
将以同样的方式打印cmd.exe
控制台窗口,调用上级的父级topLevelScript.py
和sharedFunctions.py
程式?
根据 @Gerrat 的建议,我把下面的 subprocess.Popen(...)
行改为如下。
mycommand = workingDir+scriptName
cp = subprocess.run(mycommand, shell=True, check=True, capture_output=True, universal_newlines=True)
print(cp.stdout)
但我仍然看到同样的问题,即为最低级别的脚本创建和销毁一个新的控制台窗口,而没有将它的任何输出传递给持久调用窗口。
鉴于 subprocess.run
返回一个 已完成流程我觉得你可以把 someCommand.py
以下是:
cp = subprocess.run("some cli command", shell=True, check=True, capture_output=True, universal_newlines=True)
print(cp.stdout)