我最近安装了Ubuntu以与我的Windows操作系统一起运行。我想看看某个脚本是如何在Ubuntu中运行的,它在大多数情况下运行良好。我的代码中有一部分会导致麻烦。我尝试使用os.system('gnome-open'+ filePath)命令打开一个文件但我无法打开文件,除非我只指定文件名而不是目录(即我必须说“数据” .txt“,我不能说”home / user / workspace / project / src / data.txt“,因为它会说文件/目录不存在)。此外,我为了测试目的制作了这个文件的多个副本,其中一些在其名称中有括号,当我尝试打开这些文件时,我收到错误“sh:语法错误:”(“意外”并且它没有指定代码行所以我假设它是我调用这个函数时访问的行。下面是我引用的代码。
def openFileOfItem(self, row):
print fileList[row]
if platform.system() == "Windows":
os.startfile(fileList[row])
else:
if platform.system() == "Linux":
os.system('gnome-open ' + nameList[row])
else:
os.system('open %s' % fileList[row])
一些示例输出:
/home/damian/workspace/Kde Gen/src/data.txt
Error showing url: Error stating file '/home/damian/workspace/Kde': No such file or directory
/home/damian/workspace/Kde Gen/src/data (copy).txt
sh: Syntax error: "(" unexpected
答案 0 :(得分:3)
您将字符串直接转储到命令行而不转义 - 当shell尝试执行您提供给它的命令时,这会导致错误。您需要先转义文件路径。由于您使用的是Python 2.7,请尝试使用pipes.quote
from pipes import quote
def openFileOfItem(self, row):
print fileList[row]
if platform.system() == "Windows":
os.startfile(fileList[row])
else:
if platform.system() == "Linux":
os.system('gnome-open %s' % quote(nameList[row]))
else:
os.system('open %s' % quote(fileList[row]))
答案 1 :(得分:2)
你正在有效地运行一个shell命令,它会被你路径中的空格绊倒。这不是引用参数,而是更清晰:
import subprocess
subprocess.call([ "gnome-open", nameList[row] ] )
答案 2 :(得分:0)
AFAICT,错误消息是因为路径中有空格。引用路径应该解决问题。
os.system('gnome-open "%s"' % nameList[row])
答案 3 :(得分:0)
我不能说“home / user / workspace / project / src / data.txt”,因为它会说文件/目录不存在)
您的意思是“/home/user/workspace/project/src/data.txt”吗?否则,它相对于当前目录。
除此之外,在UNIX上,习惯上使用直接运行程序的版本并传递参数向量,否则shell(由system()使用)可能会做一些奇怪的东西,你告诉它没有打算(这是叫注射)。
os.spawnvp(os.P_WAIT,“gnome-open”,[“gnome-open”,nameList [row]])