Python os.walk 开场 apps/files
Python os.walk and opening apps/files
我正在尝试制作一个脚本,用于在应用程序目录中爬行并打开给定的文件。所以这是我的代码
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
使用 filename in files
的 IMO 使代码更清晰,并完成几乎相同的工作。
我正在尝试制作一个脚本,用于在应用程序目录中爬行并打开给定的文件。所以这是我的代码
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
使用 filename in files
的 IMO 使代码更清晰,并完成几乎相同的工作。