来自Matlab (新增python),在某些情况下,我习惯于“欺骗”一些手动设置varargin .我需要修改一些代码,希望ASDF=...和BSDF=...行保持不变。为此,我想设置sys.argv1.能否做到这一点,这是否被认为是不好的做法?
#read ASDF and BSDF from a text file, with the section that is specified by the argument provided
if len(sys.argv) == 1:
sys.argv[1]='DEFAULT'
print('Using ' + sys.argv[1]):
ASDF = config.get(sys.argv[1],'ASDF');
BSDF = config.get(sys.argv[1],'BSDF');
elif len(sys.argv) == 2:
print('Using ' + sys.argv[1]):
ASDF = config.get(sys.argv[1],'ASDF');
BSDF = config.get(sys.argv[1],'BSDF');
else:
print('too many inputs, don''t confuse me...')
quit()发布于 2019-11-27 21:36:44
不要使用sys.argv;使用argparse。
您现在所做的并不需要设置sys.argv[1];只要在您使用它的地方使用"DEFAULT"即可。
if len(sys.argv) == 1:
print('Using DEFAULT'):
ASDF = config.get('DEFAULT', 'ASDF');
BSDF = config.get('DEFAULT', 'BSDF');
elif len(sys.argv) == 2:
print('Using ' + sys.argv[1]):
ASDF = config.get(sys.argv[1],'ASDF');
BSDF = config.get(sys.argv[1],'BSDF');
else:
print('too many inputs, don''t confuse me...')
sys.exit(1)设置sys.argv[1]是非常有用的,例如,如果您想要对config.get的调用进行因子化,
if len(sys.argv) == 1:
# there is no sys.argv[1] to assign to;
# you need to append to the list.
sys.argv.append('DEFAULT')
elif len(sys.argv) > 2:
sys.exit(1)
print('Using ' + sys.argv[1]):
ASDF = config.get(sys.argv[1],'ASDF');
BSDF = config.get(sys.argv[1],'BSDF');也就是说,一般来说,您不直接使用sys.argv。使用argparse就像在QuantumLicht's answer中一样。
发布于 2019-11-27 21:27:28
也许您应该使用默认的you解析模块来进行参数解析:https://docs.python.org/3/library/argparse.html
我不能百分之百肯定我理解你想要做的事情,但以下是一个暂时的解决方案:
#read ASDF and BSDF from a text file, with the section that is specified by the argument provided
import argparse
parser = argparse.ArgumentParser(description="My argument parser")
parser.add_argument('some_argument')
parser.add_argument('section', nargs='?', default="DEFAULT")
args = parser.parse_args() # Will parse sys.argv by default
section = args.section
print('Using ' + section)
ASDF = config.get(section,'ASDF');
BSDF = config.get(section,'BSDF');当集合数不正确时,Argparse将管理错误。语法也可能更接近于您在matlab中所知道的内容。
发布于 2019-11-27 21:29:18
虽然可以通过设置sys.argv = [...] (可能,我使用python已经有一段时间了)来实现这一点,但是这样做肯定会被认为是错误的做法。
变量sys.argv是C语言中的一个保持器,在C中,程序的主要功能如下所示:
int main(int argc, char *argv[]) {
...
}当程序被加载时,传递给程序的参数被加载到一个连续的内存块中,在已经为参数分配的空间之后,假设存在任何额外的空间是不安全的。由于要分配给参数的值可能是比原始参数长的字符串,或者是程序启动后的参数,这样做可能会损坏程序的内存或触发某种类型的内存访问异常(在C中)。
https://stackoverflow.com/questions/59078249
复制相似问题