在python中使用os.popen运行命令时无法获得正确的输出

时间:2012-07-23 09:25:05

标签: python command-line

import os

def getName(AAPTLocation, apkFile):

    AAPTLocation = AAPTLocation.replace('\\','\\\\')
    apkFile = apkFile.replace('\\','\\\\')
    pname = ''
    cmd = ' \"\"' + AAPTLocation + '\" dump badging \"' + apkFile + '\"\"'
    p = os.popen(cmd)
    while 1:
        s = p.readline()
        if s:
            print s
            if s.find('package') != -1 and s.find('name') != -1:
                pname = s  
        if not s:
            break
    p.close()
    return pname

AAPTLocation = 'C:\Program Files\Android\android-sdk\platform-tools\aapt.exe'
apkFile = 'C:\APKs\test.apk'
print getName(AAPTLocation, apkFile)

我需要运行aapt.exe,获取apk的包名并解析结果。

直接在命令行界面中运行“C:\ Program Files \ Android \ android-sdk \ platform-tools \ aapt.exe”转储标记“C:\ APKs \ test.apk”工作正常。但是在我上面粘贴的python脚本中,它并没有给我任何东西。

我已经尝试逃避反斜杠但它根本没有任何区别。我的代码有问题吗?。

1 个答案:

答案 0 :(得分:0)

你需要加倍python文字中的斜杠,它们被解释为转义码的开头,否则:

>>> 'C:\Program Files\Android\android-sdk\platform-tools\aapt.exe'
'C:\\Program Files\\Android\x07ndroid-sdk\\platform-tools\x07apt.exe'
>>> 'C:\\Program Files\\Android\\android-sdk\\platform-tools\\aapt.exe'
'C:\\Program Files\\Android\\android-sdk\\platform-tools\\aapt.exe'
>>> print 'C:\\Program Files\\Android\\android-sdk\\platform-tools\\aapt.exe'
C:\Program Files\Android\android-sdk\platform-tools\aapt.exe

注意第一个例子(来自你的代码)python如何将\a条目解释为十六进制07字符,而不是BELL的ASCII代码。

替代方法是使用原始python字符串文字,在其前面添加字母r

>>> r'C:\Program Files\Android\android-sdk\platform-tools\aapt.exe'
'C:\\Program Files\\Android\\android-sdk\\platform-tools\\aapt.exe'

有关字符串转义如何在字符串文字中起作用的详细信息,请参阅the string literals documentation