我正在eclipse上编写一个python代码,希望打开Downloads文件夹中的一个文件。我正在使用MacOSX10.8.2。我试过f=os.path.expanduser("~/Downloads/DeletingDocs.txt")
还有
ss=subprocess.Popen("~/Downloads/DeletingDocs.txt",shell=True)
ss.communicate()
我基本上想在subprocess中打开一个文件,来监听打开的文件中的更改,但是在这两种情况下文件都不会打开。
Tags:
我很犹豫是否回答,因为这个问题是双重张贴和混乱的措辞,但。。。如果要使用默认编辑器在OSX中“打开”该文件,请将
open
命令添加到子进程中。这对我有效:这很可能是一个权限问题,如果您在Python解释器中尝试代码,那么在调用subprocess.Popen时,您可能会收到来自shell的“Permission denied”错误。如果是这种情况,那么您需要使文件最少700个(默认情况下可能是644个),您可能需要744个。
请尝试Python解释器中的代码,并检查“Permission denied”错误,如果您看到该错误,请在shell中执行此操作:
然后运行脚本。要在Python中完成这一切,可以使用os.system:
它在Windows中“工作正常”的原因是Windows不支持与*nix系统(如Linux、BSD、OS X等)一样的文件权限类型(读、写和执行)。
注意OSX文件处理方式,IO根据文件类型有所不同。 例如,在Windows下被视为“纯文本文件”的
.txt
文件实际上是OSX下的压缩数据流,因为OSX试图“智能”存储空间。如果你不知道的话,这可能会毁了你的一天。。继续)
例如,当双击OSX中的一个
.txt
文件时,通常会弹出文本编辑器,它所做的是调用一个os.open()
,而不是在一个较低的级别上访问它,而这个级别允许OSX中间层执行disk-area|decompression pipe|file-handle -> Texteditor
,但是如果您在较低的级别上访问文件对象,则最终会打开存储文件的磁盘区域,如果您打印你会得到垃圾数据,因为它不是你期望的数据。所以尝试使用:
摆弄旗帜。 我真的不记得这两个文件中的哪一个会像从磁盘一样打开文件(
open()
或os.open()
),但是其中一个会使您的数据看起来像垃圾,有时您只是得到解压缩管道的指针(即使文本文件是hughe,也会给您提供大约4字节的数据)。如果它正在跟踪/捕获您想要的文件的更新
如果时间和你上次的支票不一样,那就用它做些酷的事情。 例如,Python可以使用这些库:
还有更多,所以不要将打开外部应用程序作为第一个修复程序,而是尝试通过Python打开它们并根据您的喜好进行修改,而只能作为最后的手段(即使是这样)通过Popen打开外部应用程序。
但既然你要求了(有点。。。呃),这里有一个Popen方法:
过度解释你的工作:
这将打印每次更改的文件内容。
工作原理: 常规文件打开程序
with open() as fh
将打开文件并将其作为句柄放在fh
中,一旦调用.read()
而不使用任何参数,它将获取文件的全部内容。 这反过来又不会关闭文件,它只是将“reading”指针放在文件的后面(为了方便起见,可以说是放在位置50)。现在你的指针在文件的第50个字符的末尾。 无论你在文件中写什么,都会在文件中放入更多的数据,这样下一个
.read()
将从位置50+获取数据,使.read()
不为空,因此我们通过发出.seek(0)
将“reading”指针放回位置0,然后打印所有数据。将其与
os.path.getmtime()
结合起来,以微调任何反向更改或1:1比率更改(替换字符拼写错误等)。相关问题 更多 >
编程相关推荐