【发布时间】:2019-07-09 18:29:14
【问题描述】:
我有点奇怪,我需要一个 Python 函数从脚本中运行,然后从我的主代码中调用该脚本。
我想使用subprocess 模块,并且知道如何使用它来将参数传递给纯脚本,但问题是,我需要将参数传递给其中的嵌套 Python 函数,其中大部分是可选的并具有默认值。
我认为arparse 会以某种方式帮助我做到这一点。
这是我正在尝试的示例:
## Some Argparse, which will hopefully help
import argparse
parser = argparse.ArgumentParser()
## All arguments, with only "follow" being required
parser.add_argument('file_name', help='Name of resulting csv file')
parser.add_argument('sub_name', help='Sub-name of resulting csv file')
parser.add_argument('follow', help='Account(s) to follow', required=True)
parser.add_argument('locations', help='Locations')
parser.add_argument('languages', help='Languages')
parser.add_argument('time_limit', help='How long to keep stream open')
args = parser.parse_args()
## Actual Function
def twitter_stream_listener(file_name=None,
sub_name='stream_',
auth = api.auth,
filter_track=None,
follow=None,
locations=None,
languages=None,
time_limit=20):
... function code ...
... more function code ...
...
...
## End of script
【问题讨论】:
-
argparse只获取sys.argv中的字符串(或您明确传递给parse_args的其他列表)并为您提供对象args。您对args的处理取决于您自己。您可以将其视为全局变量,或将其作为附加参数传递给twitter_stream_listener,或者在需要时将单个属性作为参数传递。 -
您的代码看起来不错,您是否收到任何错误?
-
你确定要使用
subprocess来启动程序A并在里面执行函数A.twitter_stream_listener()吗?一个更简单的方法是让您的代码import A并直接调用A.twitter_stream_listener()。 -
aaaakshat,我没有收到任何错误,只是不确定如何构造我的代码以将我解析的参数发送到我的函数。 BoarGules,一开始我想这样做,但是我有问题的函数是由其他人编写的,我不知道如何重构它以允许我中途关闭所述函数(不影响内核其余部分中的任何其他进程),所以我试图给它自己的子进程,这似乎更容易即时关闭。
标签: python bash subprocess argparse