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

时间:2011-05-03 04:23:54

标签: python pyqt pyqt4

我想帮助从python脚本调用命令提示符(以及将一些参数传递给命令提示符)。

我使用pyqt4开发UI,在UI上我有一个运行按钮。在选择运行按钮时,我想调用命令提示符并传递一些脚本名称作为参数。

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.'

当我单击“运行”按钮时,应用程序将停止运行,并且根本不会调用命令提示符。我尝试使用os.system同样的结果。

另外,我想知道如何将参数传递给调用函数?

对此的任何帮助都非常感谢。

谢谢,

4 个答案:

答案 0 :(得分:2)

要在Windows上正确定义Python中的文件路径,您需要执行以下三项操作之一:

  • 使用正斜杠:"C:/PerfLocal_PAL"(无论平台如何,Python都能理解正斜杠)
  • 使用原始字符串:r"C:\PerfLocal_PAL"
  • 逃离反斜杠:"C:\\PerfLocal_PAL"

这会影响您的chdir电话和subprocess.call调用。

但是,由于您的父进程是GUI应用程序,因此没有stdinstdoutstderr的控制台流,您也会遇到麻烦。尝试使用以下代码来获得一个完全独立的命令窗口:

subprocess.call("start", shell=True)

您可能还想使用"/D"的{​​{1}}参数来设置工作目录,而不是更改父进程的cwd:

start

答案 1 :(得分:0)

一个问题是subprocess.call将阻塞直到它完成,并且cmd.exe将在您退出之前不会返回。这回答了'刚刚去世',但可能无法解释控制台永远不会出现。从这开始:

subprocess.Popen(['C:\Windows\system32\cmd.exe'])

至少不会阻止。如果你可以让它出现,试试你的论点,如下:

subprocess.Popen(['C:\Windows\system32\cmd.exe', 'program_or_script', 'arg1'])

答案 2 :(得分:0)

您是否尝试过调试此功能?脚本失败了哪一行?它实际上是否真的启动了runscript功能?

关于将参数传递给cmd.exe,请查看subprocess.call的文档。它将向您显示您可以使用第二个参数为程序提供命令行参数,例如

subprocess.call(["C:\windows\system32\cmd.exe", "scriptname.bat"])

答案 3 :(得分:0)

您的信号连接和子进程调用似乎没问题。 将您的chdir电话更改为:

  os.chdir(r'C:\PerfLocal_PAL')

os.chdir(r'C:\PerfLocal_PAL')

我猜你得到的错误是表格(当你从命令提示符启动你的应用程序时):

WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: 'C:\PerfLocal_PAL'