我想通过使用ArgumentParser传递一些参数来运行我的python代码,解析器代码如下:
def parse_args(argv):
global Settings, COST_PP, COST_BP, COST_NP, COST_PN, COST_BN, COST_NN
desc = "..."
parser = argparse.ArgumentParser(description=desc)
parser.add_argument("infile", action="store")
parser.add_argument("-o", "--outfile", action="store", dest="outfile")
args = parser.parse_args(argv)
def main():
global Settings
parse_args(sys.argv[1:])
print("\t".join(sys.argv[1:]))
logging.info("SETTINGS:")
for k, v in Settings.items():
logging.info("\t\t" + str(k) + ":\t" + str(v)) ...
if __name__ == '__main__':
main()
但是我收到了这样的错误:
usage: PythonShell.py [-h] [-o OUTFILE] [-alg ALGORITHM] [-cL CLASS_LIST]
[-n RUNS] [-tf TRAIN_FRAC] [-cs COST_SET]
[-ms MULT_STRAT] [--log LOG_FILE] [-d]
infile
PythonShell.py: error: unrecognized arguments: 0 50000 1916
a91f477cb4de44dfa5d1f3dd01f8f606 2.2.0
To exit: use 'exit', 'quit', or Ctrl-D.
我想知道如何在databricks笔记本中正确运行代码?感谢任何帮助!
答案 0 :(得分:0)
我遇到了类似的问题。即使我尝试运行the documentation的最基本示例。但是您可以通过两种方式在数据块中运行参数解析器:
在数组中传递参数:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
## normally you can now do: parser.parse_args(), instead do this:
parser.parse_args(['23', '35'])
将代码放在单独的笔记本中,并使用%run命令从当前笔记本中运行该笔记本。 here
答案 1 :(得分:0)
我发现将参数从Azure数据工厂传递给Databricks Python脚本/作业的唯一方法是使用shlex:
import argparse, shlex
parser = argparse.ArgumentParser()
parser.add_argument('--arg1', type=str, required=True)
parser.add_argument('--arg2', type=str, required=True)
args = parser.parse_args(shlex.split(" ".join(sys.argv[1:])))
Databicks将参数传递为:[“ script”,“ --arg1 val”,“ --arg1 val”] 而argparse期望将参数名称和值分割开:[“ script”,“-arg1”,“ val”,“-arg1”,“ val”]。
我们首先将所有参数连接为一个字符串,然后使用shlex对其进行拆分,以获取正确的列表以传递给parse_args。