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 上有不同版本的 adb
。 documentation 提到处理参数的方式在 Android Platform-Tools 23.
中发生了变化
我想 运行 在 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 上有不同版本的 adb
。 documentation 提到处理参数的方式在 Android Platform-Tools 23.