python Popen 适用于 linux 但不适用于 windows

python Popen works on linux but doesn't on windows

我想 运行 在 linux 和 windows 上使用相同的代码。下面的代码适用于 linux 但不适用于 windows!

#!/usr/bin/env python3
import subprocess

def runcmd(cmd,show=True):
    print("cmd:" + cmd)
    try:
        p = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
        retval = p.communicate()[0]
        print(retval)
        return retval.decode('utf-8')
    except:
        print("cmd error:" + cmd)
        pass
    return ""

def main():
    runcmd("adb shell 'find /data/ -type f ! -empty'")
    return

if __name__ == "__main__":
    main()

windows10 的输出:

cmd:adb shell 'find /data/ -type f ! -empty'
b'/system/bin/sh: find /data/ -type f ! -empty: inaccessible or not found\r\n'

不要将整个 adb shell 命令放在一个参数中。使用:

runcmd("adb shell find /data/ -type f ! -empty")

您可能在 Linux 和 Windows 上有不同版本的 adbdocumentation 提到处理参数的方式在 Android Platform-Tools 23.

中发生了变化