将参数传递到os.system



我需要通过python执行以下命令。rtl2gds是一个读取两个参数的工具:文件路径和模块名称

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")

但是,当我调用-rtl=args.fileread时,读取到args.fileread的文件路径不会进入os.system。相反,args.fileread本身被假定为文件名,并且该工具会标记一个错误。

我确信有一种方法可以将命令行参数读入os.system或其他函数(可能是子进程?-但不知道如何)。感谢您的帮助。

不要使用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'])

我试图将一堆.m4a文件转换为.mp3文件,这个python脚本对我有效:

f = os.listdir()
for file in f:
    if(file.endswith('.py')):
        continue
    lastIndex = file.rfind('.')
    name = file[0:lastIndex]
    
    filename = file.replace(' ','\ ')
    
    name = name.replace(' ','\ ')
    
    os.system('ffmpeg -i {0} -c:a libmp3lame -q:a 8 {1}.mp3'.format(str(filename), str(name)))

相关内容

  • 没有找到相关文章

最新更新