2015-12-17 156 views
-1

工作,我有下面的代码:Python和使用os.system

def display_keyboard(*_): 
    os.system(r'start " " C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe') 

的问题是,此代码运行时,我得到以下错误:

The system cannot find the file C:\Program. 

我有工作了一个问题withespaces使其搜索整个文件

C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe 
+0

你有机会阅读该功能的全部文件? –

+0

你有没有试过'os.system(r'start“”“C:\ Program Files \ Common Files \ Microsoft Shared \ ink \ TabTip.exe'')'? –

+0

将路径名称放在引号中。 –

回答

2

使用subprocess.Popen()subprocess.run()几乎总是比os.system()更好的选择。

import subprocess 

def display_keyboard(*args): 
    return subprocess.Popen(r'C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe') 

一些原因包括:

  • 没有必要担心逃逸参数;
  • 对子进程有更多的控制,例如通过stdout,stderr和stdin流进行控制;
  • wait()terminate()方法等
+0

谢谢。好奇心有什么区别? – jon220

+1

解释会有帮助,列表也是多余的,不确定'* args'在做什么 –

+0

我包含'* args',因为原始代码包含一个可变参数输入。我给了它更常规的名字。 –

0

你应该使用

os.startfile("C:\\Program Files\\Common Files\\Microsoft Shared\\ink\\TabTip.exe") 

我觉得

+0

这可能是一个比我更明确的答案,因为它确实如它所说的那样,而不是依赖于其他程序。 – OnGle

0

当从命令行运行命令您必须逃脱空白字符或引号包围他们(我不记得你是否必须在Windows中使用双引号,这是一段时间)。这是因为空格被当作参数之间的分隔符。尝试

os.system(r'start " " "C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe"')

0

试图引号括住路径:

os.system('"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe"') 
+0

请不要在答案中链接到您的个人网站,除非您链接到与问题相关的内容并包括目的地的信息摘要。否则,它将来会被视为垃圾邮件。 –

+0

这也将阻塞,直到完成,我相信在OP他期望它不阻止 –