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