Python尝试理解subprocess操作系统调用

2024-06-11 21:01:14 发布

您现在位置:Python中文网/ 问答频道 /正文

请在下面的对话中帮助解决很多问题:

-)为什么会这样子流程检查输出([“ls”、“-rt”、““]”)不产生输出,但至少被接受?你知道吗

-)为什么是“子流程检查输出([“ls-rt”,“)”完全不接受?你知道吗

-)最重要的是:在python中,如何获得与某个regex匹配的最新文件的名称?我的想法是向python提供类似“ls-rt$REGEX | head-1”的内容,但python似乎非常不喜欢这种方法。。?你知道吗

karel@suske:~/home_shared/develop/airnav_db$ python --version
Python 2.7.6
karel@suske:~/home_shared/develop/airnav_db$ python -c 'import subprocess ; subprocess.check_output(["ls -rt","."])'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 566, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
karel@suske:~/home_shared/develop/airnav_db$ python -c 'import subprocess ; subprocess.check_output(["ls","-rt","."])'
karel@suske:~/home_shared/develop/airnav_db$ ls -l
total 52
drwxrwxrwx 2 karel users 4096 Oct 11  2009 auxdata
...

Tags: inhomeoutputdbchecklinelsfile
1条回答
网友
1楼 · 发布于 2024-06-11 21:01:14

"ls -rt"不是有效命令的名称,所以这就是第二个案例失败的原因。^带有参数"-rt""."的{}工作得很好,只是没有产生您所期望的输出。但是无论如何,你应该在^{}上循环。你知道吗

when = 0
for name in os.listdir('.'):
    if not 'foo' in name:
        continue
    # name matches *foo*
    st = os.stat(name)
    if st.mtime > when:
        when = st.mtime
        newest = name
print newest

如果您真的需要正则表达式,这应该可以很容易地扩展到正则表达式;但是对于大多数普通任务来说,它们实在是太过分了。你知道吗

对于记录,^{}以字符串形式返回shell命令的输出。但是您确实希望避免使用外部进程来处理在Python中很容易完成的任务。你知道吗

相关问题 更多 >