在adb shell中使用%s和*进行Python子进程调用

时间:2016-11-23 21:55:16

标签: python subprocess adb wildcard

我正在学习python,我很喜欢它如何帮助我自动化一些日常生活。我正在使用谷歌的所有问题,直到现在我已经非常成功。但是这次我真的被困住了,已经花了两天时间。

以下代码不起作用,因为同一行中有%s和*

from Tkinter import *
import subprocess as sp
regLists = ['1b7', '1b6', '209', '197']
valLists = ['23', '80', 'ab', '73']
for regs,vals in zip(regLists,valLists):
        sp.call('adb shell "echo %s %s > /d/asoc/*-snd-card*/*_code*/code_reg"'%(regs,vals), shell=True)

错误:

Error: /system/bin/sh: can't create /d/asoc/*-snd-card*/*_code*/code_reg: 
No such file or directory
  • a)每个设备的路径名称不同
  • b)*用于查找linux目录中的路径名

工作代码如下所示,因为没有*并且提到了整个路径

sp.call('adb shell "echo %s %s > /d/asoc/xyz-snd-card-device45/ffde_code-fffb/code_reg"'%(regs,vals), shell=True)

请有人帮助我如何更改上面的代码,以便我可以使用上面的代码......

2 个答案:

答案 0 :(得分:0)

for regs,vals in zip(regLists,valLists):
    echo = "echo {} {} > /d/asoc/*-snd-card*/*_code*/code_reg".format(regs,vals)
    sp.check_call(["adb", "shell" , echo])

答案 1 :(得分:0)

谢谢大家的支持。 我一定会尝试上面提到的for和find选项,以便更熟悉python编程。与此同时,在谷歌上做了更多的调试,找到了另一个有效的解决方案,如下图所示。 通过使用&&运算符,代码按预期工作。

  <Grid Grid.Column="1" Background="#eeeeee" Margin="10,0,0,0" width="250">
        <GroupBox Padding="5" Header="Lists">                            
        <ListBox x:Name="ListBox" BorderBrush="#FFECECEC" ItemsSource="{Binding Lists}" SelectionChanged="Panel_SelectionChanged" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                <Grid>
                <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="auto"/>
                </Grid.ColumnDefinitions>

                    <Grid Grid.Column="0" >
                    <TextBlock Text="{Binding Name}" Style="{StaticResource Pan}" HorizontalAlignment="Left" />
                    </Grid>

                    <Grid Grid.Column="1" HorizontalAlignment="Right" >
                    <Button Style="{StaticResource Del}" Width="30" Height="30" Margin="5,0,0,0">
                    <Image Source="../Resources/Delete2.png" Width="32" />
                    </Button>
                    </Grid>

                </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        </GroupBox>
    </Grid>

PS:我仍然需要检查sp.call和sp.check_output之间的区别