我如何执行一个程序,从蟒蛇?操作系统。系统出现故障,由于空间在路径

StackOverflow https://stackoverflow.com/questions/204017

  •  03-07-2019
  •  | 
  •  

我有一个Python脚本,需要执行一个外部程序,但是由于某种原因失败。

如果我有以下脚本:

import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();

然后它无法与以下错误:

'C: emp\a'是不被承认为一个内部或外部的命令,可操作的程序或批文件。

如果我逃跑的计划与行情:

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();

然后它的工作。然而,如果我补充一个参数,它停止工作:

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();

什么是正确的方式执行一个程序,并等待它完成?我不需要读出来,因为它是一些程序,不工作然后就退出,但我需要等待来完成。

还注意到,移动的程序非隔开的路径不是一个选项。


这并不工作,可以:

import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();

注意到交换单双引号。

有或没有一个参数,以记事本里,失败的错误信息

文件、目录名称或卷标语法是不正确的。

有帮助吗?

解决方案

subprocess.call 将避免出现问题必须处理各种shell的引用约定。它接受一个列表而不是字符串,因此参数更容易分隔。即。

import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])

其他提示

这是一种不同的做法。

如果您使用的是Windows,则可以在资源管理器中双击该文件,或将文件名作为参数提供给DOS <!>“start <!>”; command:使用与其扩展名相关联的任何应用程序(如果有)打开文件。

filepath = 'textfile.txt'
import os
os.startfile(filepath)

示例:

import os
os.startfile('textfile.txt')

如果记事本与.txt文件相关联,这将使用记事本打开textfile.txt。

最外面的引号由Python本身使用,而Windows shell则看不到它。如上所述,Windows只能理解双引号。 Python会在Windows上将forward-slashed转换为反斜杠,因此您可以使用

os.system('"C://Temp/a b c/Notepad.exe"')

'由Python使用,然后传递<!>“C:// Temp / a b c / Notepad.exe <!>”; (作为Windows路径,不需要双反斜杠)到CMD.EXE

至少在Windows 7和Python 3.1中,如果命令路径中有空格,则Windows中的os.system需要命令行双引号。例如:

  TheCommand = '\"\"C:\\Temp\\a b c\\Notepad.exe\"\"'
  os.system(TheCommand)

一个让我感到困惑的真实例子是在VirtualBox中克隆一个驱动器。由于某些访问权限问题,上面的subprocess.call解决方案无法正常工作,但当我双重引用该命令时,<=>开心了:

  TheCommand = '\"\"C:\\Program Files\\Sun\\VirtualBox\\VBoxManage.exe\" ' \
                 + ' clonehd \"' + OrigFile + '\" \"' + NewFile + '\"\"'
  os.system(TheCommand)
import win32api # if active state python is installed or install pywin32 package seperately

try: win32api.WinExec('NOTEPAD.exe') # Works seamlessly
except: pass

我怀疑它与在Windows中使用快捷方式时的问题相同...试试这个:

import os;
os.system("\"C:\\Temp\\a b c\\Notepad.exe\" C:\\test.txt");

对于python <!> gt; = 3.5 subprocess.run应该用来代替subprocess.call

https://docs.python.org /3/library/subprocess.html#older-high-level-api

import subprocess
subprocess.run(['notepad.exe', 'test.txt'])

假设我们需要运行Django网服务器(Linux),有的是空间之间的路径(path='/home/<you>/<first-path-section> <second-path-section>'),这样做如下:

import subprocess

args = ['{}/manage.py'.format('/home/<you>/<first-path-section> <second-path-section>'), 'runserver']
res = subprocess.Popen(args, stdout=subprocess.PIPE)
output, error_ = res.communicate()

if not error_:
    print(output)
else:
    print(error_)

[注意到]:

  • 不要忘了访问权限: chmod 755 -R <'yor path'>
  • manage.py 是exceutable: chmod +x manage.py
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top