从Python脚本调用命令提示符时出现问题
我想要一些帮助,想从一个Python脚本中调用命令提示符,并且传递一些参数给命令提示符。
我使用pyqt4来开发用户界面,在界面上有一个运行按钮。当我点击这个运行按钮时,我希望能够打开命令提示符,并把一个脚本名称作为参数传递过去。
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
一个问题是,subprocess.call
这个命令会一直等到它完成才会继续执行,而 cmd.exe 这个程序在你退出之前是不会返回的。这就解释了“只是死掉了”的情况,但可能没有解释为什么控制台从来没有出现。可以先试试这个:
subprocess.Popen(['C:\Windows\system32\cmd.exe'])
这个至少不会让程序卡住。如果你能让它出现,试试你的参数,比如这样:
subprocess.Popen(['C:\Windows\system32\cmd.exe', 'program_or_script', 'arg1'])
0
你的信号连接和子进程调用看起来没问题。把你的 chdir 调用改成:
os.chdir(r'C:\PerfLocal_PAL')
我猜你遇到的错误是这样的(当你从命令提示符启动你的应用程序时):
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: 'C:\PerfLocal_PAL'
2
在Windows上正确地定义Python中的文件路径,你需要做以下三件事中的一件:
- 使用正斜杠:
"C:/PerfLocal_PAL"
(Python可以理解正斜杠,不管你用什么平台) - 使用原始字符串:
r"C:\PerfLocal_PAL"
- 转义反斜杠:
"C:\\PerfLocal_PAL"
这会影响到你的chdir
调用和subprocess.call
的使用。
不过,你还会遇到一些麻烦,因为你的父进程是一个图形界面应用程序,所以没有控制台流来处理stdin
、stdout
和stderr
。你可以尝试使用以下方法来打开一个完全独立的命令窗口:
subprocess.call("start", shell=True)
你可能还想使用"/D"
这个参数来设置你的工作目录,而不是改变父进程的当前工作目录:
subprocess.call(["start", "/DC:\\PerfLocal_PAL"], shell=True)