使用元组插入命令

时间:2016-12-07 18:26:33

标签: python

我试图让这个脚本获取元组的内容并循环使用for循环(我不确定将它放在我的代码中的哪个位置)并将其放入命令中元组的内容。对于此示例,我使用find作为命令。根据执行者使用sp1sp2使用哪个选项,将确定将使用多少元组。

import sys, subprocess, os, string

cmd = '/bin/find '

tuple = ('apple', 'banana', 'cat', 'dog')

sp1 = tuple[0:1]
sp2 = tuple[2:3]

def find():
    find_cmd = subprocess.Popen(cmd + " * -name {}".format(type)),
                                stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE, shell=True)
    output, err = find_cmd.communicate()
    find = output
    find_temp = []
    find_temp = string.split(find)
    if find_temp[0] == ' ':
        print("Found nothing")
    else:
        print("Found {}".format(find_temp))

type_input = input("Are you looking for fruit or animals? ")
if type_input  == "fruit":
    type = sp1
elif type_input == "animals":
    type = sp2
    print("syntax error")
    exit()

find()

1 个答案:

答案 0 :(得分:0)

你已经关闭了,但是你没有做你想做的事,那只是愚蠢的。你可以做得更好。

不是做这个奇怪的元组切片,而是给它们一个真实的名字:

import sys, subprocess, os, string

# No need for the trailing space here
FIND = '/bin/find'

fruit = ('apple', 'banana')
animals = ('cat', 'dog')

或者,您可以使用字典:

find_params = {
    'fruit': ['apple', 'banana'],
    'animals': ['cat', 'dog'],
}

在你的评论中你提到过:

  

我的元组有点大,两个变量都使用了一些相同的值......   这样我就不会将许多相同的值分成两个单独的列表。

你仍然可以采取一个很好的方法:

cheeses = ('Wensleydale', 'Edam', 'Cheddar', 'Gouda')
spam = ('Spam with eggs', 'Spam on eggs', 'Spam')
confectionaries = ('crunchy frog', 'spring surprise', 'cockroach cluster',
                   'anthrax ripple', 'cherry fondue')
food = cheeses + spam + confectionaries

即使您只需要一个子集,您仍然可以执行以下操作:

food = cheeses + spam[:2] + confectionaries[-1:]

您应该为find命令取代参数。此外,无需连接,然后使用格式字符串。只需使用格式字符串即可:

def find(what, cmd=FIND):
    find_cmd = subprocess.Popen('{cmd} * -name {what}'.format(cmd=cmd, what=what),
                                stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE, shell=True)
    output, err = find_cmd.communicate()
    find = output
    find_temp = []
    find_temp = string.split(find)
    if find_temp[0] == ' ':
        print("Found nothing")
    else:
        print("Found {}".format(find_temp))

现在您可以使用变量或他们要求的内容:

type_input = input("Are you looking for fruit or animals? ")
try:
    find(find_params[type_input])
except KeyError:
    sys.exit('Unknown parameter {!r}'.format(type_input))

# Or use the variables
if type_input  == "fruit":
    find(fruit)
elif type_input == "animals":
    find(animals)
else:
    sys.exit('Unknown parameter {!r}'.format(type_input))