我有两个与我合作的脚本。第一个,Script1.py,通过在for循环中传递参数来导入Script2.py并使用其main()
:
for ipNum in ipList:
print("Checking databases for: " + ipNum)
Script2.main("--ip " + ipNum)
然而,当运行Script1.py时,我得到了erorr:
vol.py: error: unrecognized arguments: --profile=WinXPSP3x86 -f B:/vmem/zeus.vmem connscan
main()在Script2.py中是这样的:
def main(args):
parser = argparse.ArgumentParser(description='Is This IP Bad?')
parser.add_argument('-i', '--ip', help='IP address to check')
parser.add_argument('--success', help='Also display GOOD', required=False, action="store_true")
args = parser.parse_args()
if args is not None and args.ip is not None and len(args.ip) > 0:
badip = args.ip
else:
my_ip = urlopen('http://icanhazip.com').read().rstrip()
无法识别的参数当然是在launchung script1时输入的命令行参数。如何通过单个参数列表适当地枚举多次运行script2 main()?
答案 0 :(得分:0)
我认为最好在顶级'中进行所有argparse处理。每个.py文件,只有当该文件作为脚本运行时才执行,而不是从elsehwere导入/调用它。然后你不必关心被叫脚本'消费'你的一些命令行参数,如果看到意外的参数,就会窒息。
因此可能作为带有命令行参数的脚本运行的每个.py文件看起来像这样:
import x
import y
import argparse
def main(a, b, c):
some code
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='a desc')
parser.add_argument('--a')
parser.add_argument('--b')
parser.add_argument('--c')
args = parser.parse_args()
main(args.a, args.b, args.c)
尝试将argparse内容移出Script2中的main()函数,并使用Script1中的常规参数调用main():
def main(ip=None, Sucess=None):
if ip is None:
ip=urlopen('http://icanhazip.com').read().rstrip()
If __name__ == '__main__':
parser = argparse.ArgumentParser(description='Is This IP Bad?')
parser.add_argument('-i', '--ip', help='IP address to check')
parser.add_argument('--success', help='Also display GOOD', required=False, action="store_true")
args = parser.parse_args()
main(args.ip, args.success)
然后从另一个脚本调用类似的东西:
for ipNum in ipList:
print("Checking databases for: {}".format(ipNum))
Script2.main(ipNum)
答案 1 :(得分:0)
如果只从Script1.py调用Script2.py,则在Script2中使用argparse是最重要的。相反,将相关方法从Script2导入Script1并使用它们,就好像它们位于同一名称空间中一样(因为现在它们都是)。
如果需要,Script1可以使用argparse从命令行获取内容,并将它们传递给Script2。这允许Script2专注于ip相关的行为,而Script1可以专注于用户交互。
SHOW_AS_ACTION_ALWAYS