我想帮助从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同样的结果。
另外,我想知道如何将参数传递给调用函数?
对此的任何帮助都非常感谢。
谢谢,
答案 0 :(得分:2)
要在Windows上正确定义Python中的文件路径,您需要执行以下三项操作之一:
"C:/PerfLocal_PAL"
(无论平台如何,Python都能理解正斜杠)r"C:\PerfLocal_PAL"
"C:\\PerfLocal_PAL"
这会影响您的chdir
电话和subprocess.call
调用。
但是,由于您的父进程是GUI应用程序,因此没有stdin
,stdout
和stderr
的控制台流,您也会遇到麻烦。尝试使用以下代码来获得一个完全独立的命令窗口:
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'