Python subprocess.run在使用adb时与Windows cmd提示运行不同的行为



我试图理解为什么在Windows中通过cmd提示符运行adb时会出现错误,但在subprocess.run中没有得到。

以下是我正在做的事情。我正在运行adb-s,但没有提供序列号或设备id。这会导致adb在cmd:中引发错误

c:platform-tools>adb -s shell ls
adb.exe: ls requires an argument
c:platform-tools>adb -s
adb.exe: -s requires an argument

但是,如果我使用subprocess.run,shell=False:

subprocess.run(['C:\platform-tools\adb.exe', '-s', '', 'shell', 
ls'],capture_output=True)

我没有得到任何错误,它执行shell命令ls.

如果我在没有shell命令的情况下运行它,而只是"-s",它就会像我自己运行adb.exe一样执行,并列出帮助文本

subprocess.run(['C:\platform-tools\adb.exe', '-s',''],capture_output=True)

subprocess.run究竟发生了什么,它知道忽略空参数?

更新:我只是对这种差异感到好奇,因为我正在编写一个小助手脚本,让用户在连接了多个设备的情况下选择是否输入序列号,否则默认为''。我注意到subprocess.run似乎忽略了空参数,这样我就可以不用条件语句来包含/排除"-s";选项,并始终保持"-s";选项。

调用序列号(-s(等于shelladb,然后ls报告缺少参数

adb -s shell ls

它与完全相同

adb ls
adb: ls requires an argument

区别在于前者稍后将再次抱怨序列号为CCD_ 6的设备不存在。

如果您没有指定真实的序列号,则不要使用-s

最新更新