Android 上的 Python 子进程:/bin/sh: 找不到 ls

0 投票
2 回答
2339 浏览
提问于 2025-04-18 16:55

我在安卓上运行的是一个旧版的Python,这个版本在处理大于4GB的文件时会给出错误的文件大小。所以我尝试写了一个解决办法来获取正确的文件大小,代码如下:

def getsize_workaround( filename ):
import subprocess as s
output = s.Popen("ls -l " + filename, shell=True, executable="/system/bin/sh", stdout=s.PIPE).communicate()[0]
size = long(re.split(r'\s+', output)[3])
return size

当我用一个简单的Python脚本调用这个解决办法时,它运行得很好:

print(getsize_workaround(path))

但是,当我在我的NZBGet VideoSort脚本中使用它时,它找不到ls命令,并在这行代码出错了:output = s.Popen("ls -l " + filename, shell=True, executable="/system/bin/sh", stdout=s.PIPE).communicate()[0],错误信息是:/bin/sh: ls: not found。(这个函数在第824行被调用,具体可以查看下面的Dropbox链接)。

我完全不知道为什么它找不到ls命令,任何帮助都非常感谢。你可以在这里找到VideoSort脚本:https://db.tt/oM3U5gZR

2 个回答

0

你也可以在你的bash脚本里添加一个别名,这样就可以指定你想用的Python版本。

alias python=<你想用的Python版本>

1

在使用NZBGet的时候,PATH变量没有包含正确的目录。通过手动设置os.environ['PATH']来解决了这个问题。感谢abernert提供的建议。

撰写回答