传递参数到使用os.system(Passing arguments into os.sys

2019-07-19 22:48发布

我需要通过Python来执行以下命令。 rtl2gds是一种工具,它在读出2个参数:路径到一个文件和一个模块名称

rtl2gds -rtl=/home/users/name/file.v -rtl_top=module_name -syn

我在的路径,从通过argparse用户的文件和模块名称阅读如下图所示:

parser = argparse.ArgumentParser(description='Read in a file..')    
parser.add_argument('fileread', type=argparse.FileType('r'), help='Enter the file path')    
parser.add_argument('-e', help='Enter the module name', dest='module_name')    
args = parser.parse_args()    
os.system("rtl2gds -rtl=args.fileread -rtl_top=args.module_name -syn")

但是,读入args.fileread文件路径不获得在当我打电话-rtl = args.fileread的使用os.system。 相反,args.fileread本身被假定为文件名和工具标记错误。

我相信,有一种方法在命令行参数为使用os.system或其他一些功能来读取(可能是子 - 但不可能弄清楚如何)。 任何帮助表示赞赏。

Answer 1:

不要使用os.system() ; subprocess肯定是要走的路。

你的问题是,虽然你认为Python明白,你想插args.fileread成一个字符串。 作为伟大的,因为Python是,它是不是能够了解你的心思那样!

使用字符串格式化来代替:

os.system("rtl2gds -rtl={args.fileread} -rtl_top={args.module_name} -syn".format(args=args)

如果您想将文件名传递给另一个命令,你应该使用FileType类型选择! 你想要一个文件名,而不是一个打开的文件对象:

parser.add_argument('fileread', help='Enter the file path')

但不要使用subprocess.call()而不是os.system()

import subprocess

subprocess.call(['rtl2gds', '-rtl=' + args.fileread, '-rtl_top=' + args.module_name, '-syn'])

如果rtl2gds执行命令行解析正常, =是可选的,您可以使用下面的调用,而不是,完全避免字符串连接:

subprocess.call(['rtl2gds', '-rtl', args.fileread, '-rtl_top', args.module_name, '-syn'])


文章来源: Passing arguments into os.system