从python脚本调用命令提示符时出现问题

从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

我想从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):
    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正确定义文件路径,需要执行以下三项操作之一:

  • 使用正斜杠:
    “C:/PerfLocal\u PAL”
    (Python理解正斜杠,而不考虑平台)
  • 使用原始字符串:
    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)