我正在使用一台64位的笔记本电脑,操作系统是Ubuntu 12.04。我正在尝试使用Python代码打开一个应用程序。
import os
os.system("open /home/utsav/ab.txt")
出现以下错误:
"无法获取指向控制台256的文件描述符"
我需要使用什么命令?
我正在使用一台64位的笔记本电脑,操作系统是Ubuntu 12.04。我正在尝试使用Python代码打开一个应用程序。
import os
os.system("open /home/utsav/ab.txt")
出现以下错误:
"无法获取指向控制台256的文件描述符"
我需要使用什么命令?
import os
os.system("command of your preferred app")
open
实际上是另一个命令,被 man 页面称为 openvt
,它可以打开虚拟终端。open
在OS-X上可用,在ubuntu下,我最终使用gnome-open
(如果你使用k-desktop,我不知道对应的命令是什么)。
编辑
根据Niklas B.的评论,你也可以尝试使用xdg-open
。
就我所知,Python 2.7.3 文档指出 os
模块已被弃用,应该使用 subprocess
模块。要以这种方式执行命令,可以使用 subprocess.call(args, ...)
("使用 subprocess 模块")。
基于之前的回答,你可以在 Mac OS X 上使用 open
,在运行 Gnome 桌面环境的 Linux 发行版上使用 gnome-open
。(我在 Fedora 16 上检查了 gnome-open
和 xdg-open
,两者都能正常工作。)但在 Windows 上则需要注意一点。
对于Windows,您需要使用start
,但如果文件路径或文件名中有空格,则无法正常工作。引用文件名也无法完全修复它,因为start
期望带引号的未标记参数为标题(例如,对于新的cmd
界面窗口)。这是一个问题,因为标题和要打开的文件都不是标记参数,因此为了使调用正常工作,您必须执行类似于start "DummyTitle" "Filename with spaces.ext"
的操作。
所以我们得到的是:
Mac OS X:subprocess.call(['open','/path/to/file'])
运行Gnome DE的Linux:subprocess.call(['gnome-open','/path/to/file'])
Windows:subprocess.call(['start','"DummyTitle"','"C:\\Path\\to\\File.ext"'])
或者类似于这样的东西。
对于 Python 2.7.3 之前的版本,您可以像您在问题中建议的那样使用字符串参数来使用 os
模块(只需更改系统调用的命令部分)。请注意,如果您选择使用已弃用的 os
方法,则 Windows 上有 os.startfile('/path/to/file')
可以打开文件并使用与该文件类型相关联的默认程序。