繁体   English   中英

Python os.walk和打开应用程序/文件

[英]Python os.walk and opening apps/files

我正在尝试制作一个脚本,该脚本会爬过Applications目录并打开给定的文件。 所以这是我的代码

import os, subprocess

os.chdir('/Applications')
root = '.'

for path, dirs, files in os.walk(root):
    #print path
    for f in files:
        if f == 'Atom':
            subprocess.call([f])
            break

所以我有三个问题。 最初,我以Atom为例来执行脚本。 它可以很好地打开,但是即使在打开应用程序后,循环也不会中断并继续爬网。

其次,Atom应用无法正常打开。 它在应用程序文件夹的目录中打开,看起来像这样。 在此处输入图片说明

虽然看起来应该只是这样, 在此处输入图片说明

而且非常重要的问题是,它无法用于我无法理解的任何其他应用程序。 这是我尝试打开AppStore时的错误输出。

./App Store.app
./App Store.app/Contents
./App Store.app/Contents/_CodeSignature
./App Store.app/Contents/MacOS
Traceback (most recent call last):
  File "control_files.py", line 32, in <module>
    subprocess.call([f])
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 709, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1326, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

可能是什么问题?

前面的答案是关于仅退出最内部循环的break

逃避循环(可能更整洁)的另一种方法是将这个功能隐藏在一个函数中并从中return 类似于以下内容:

def open_program(root, filename):
    for path, dirs, files in os.walk(root):
        if filename in files:
            full_path = os.path.join(path, filename)
            subprocess.call([full_path])
            return

IMO filename in files使用filename in files使代码更整洁,并且可以完成几乎相同的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM