从python脚本调用命令提示符时出现问题
我想从python脚本中获得一些关于调用命令提示符(向命令提示符传递一些参数)的帮助 我使用pyqt4开发UI,在UI上有一个run按钮。在选择run按钮时,我想调用一个命令提示符并传递一些脚本名称作为参数从python脚本调用命令提示符时出现问题,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我想从python脚本中获得一些关于调用命令提示符(向命令提示符传递一些参数)的帮助 我使用pyqt4开发UI,在UI上有一个run按钮。在选择run按钮时,我想调用一个命令提示符并传递一些脚本名称作为参数 self.connect(run_button, SIGNAL('clicked()'), self.runscript) # this is my run button signal and i'm calling the runscript() def runscript(self
self.connect(run_button, SIGNAL('clicked()'), self.runscript) # this is my run button signal and i'm calling the runscript()
def runscript(self):
print 'Inside Run Script'
os.chdir('C:\PerfLocal_PAL')
try:
subprocess.call(['C:\windows\system32\cmd.exe'])
except:
print 'Exception Caused.'
当我单击run按钮时,应用程序将停止运行,并且根本不调用命令提示符。我尝试了操作系统,也得到了同样的结果
另外,我想知道如何将参数传递给调用函数
对此,我们非常感谢您的帮助
谢谢,一个问题是,它将被阻止,直到它完成,cmd.exe将不会返回,直到您退出它。这回答了“刚死”的问题,但可能无法解释控制台从未出现的原因。从这个开始:
subprocess.Popen(['C:\Windows\system32\cmd.exe'])
这至少不会阻碍。如果你能让它出现,试试你的论点,像这样:
subprocess.Popen(['C:\Windows\system32\cmd.exe', 'program_or_script', 'arg1'])
你试过调试这个吗?脚本在哪一行失败?它是否真的启动了
runscript
函数
关于将参数传递给cmd.exe
,请查看有关的文档。它将向您显示,您可以使用第二个参数为程序提供命令行参数,例如
subprocess.call(["C:\windows\system32\cmd.exe", "scriptname.bat"])
您的信号连接和子进程调用似乎正常。 将您的chdir呼叫更改为:
我猜您得到的错误是这样的(当您从命令提示符启动应用程序时):
WindowsError:[错误123]文件名、目录名或卷标语法不正确:“C:\PerfLocal\u PAL”
要在Windows上用Python正确定义文件路径,需要执行以下三项操作之一:
- 使用正斜杠:
(Python理解正斜杠,而不考虑平台)“C:/PerfLocal\u PAL”
- 使用原始字符串:
r“C:\PerfLocal\u PAL”
- 转义反斜杠:
“C:\\PerfLocal\u PAL”
chdir
调用和子流程.call
调用
但是,您也会遇到问题,因为您的父进程是GUI应用程序,因此没有用于stdin
、stdout
和stderr
的控制台流。请尝试使用以下命令来获得完全独立的命令窗口:
subprocess.call("start", shell=True)
您可能还希望使用start
的“/D”
参数设置工作目录,而不是更改父进程的cwd:
subprocess.call(["start", "/DC:\\PerfLocal_PAL"], shell=True)
subprocess.call("start", shell=True)
subprocess.call(["start", "/DC:\\PerfLocal_PAL"], shell=True)