从python脚本运行包含多个字符串的命令行

时间:2018-06-14 11:20:10

标签: python command-line pdf-generation

您好我正在尝试自动生成PDF,我已经创建了一个生成所需PDF的python脚本但是为了生成它我必须从命令行调用my_cover.py -s "Atsumi" -t "GE1.5s" -co "Japan"

有没有人知道从我的python脚本中调用此命令行的简单方法。在脚本中,我将提示用户输入3个字符串,这些字符串当前是" Atsumi"," GE1.5s"和"日本"但是这些应该随着用户输入而改变,因此也应该在命令行调用中改变。非常感谢任何帮助

site_name = raw_input('Name of wind turbine site: ')
turbine_name = raw_input('Name of turbine type: ')
country_name = raw_input('Name of country location: ')

parser = argparse.ArgumentParser()
parser.add_argument('-s', '--site')
parser.add_argument('-t', '--turbine')
parser.add_argument('-c', '--country') 

args = parser.parse_args()

with open('cover.tex','w') as f:
    f.write(content%args.__dict__)

cmd = ['pdflatex', '-interaction', 'nonstopmode', 'cover.tex']
proc = subprocess.Popen(cmd)
proc.communicate()

retcode = proc.returncode
if not retcode == 0:
    os.unlink('cover.pdf')
    raise ValueError('Error {} executing command: {}'.format(retcode, ' '.join(cmd))) 

os.unlink('cover.tex')
os.unlink('cover.log')

"Code to run the command line goes here"
'''my_cover.py -s "Atsumi" -t "GE1.5s" -co "Japan"'''

1 个答案:

答案 0 :(得分:0)

docopt是一种编程程序接口的好方法,但它会鼓励像cover.py --country=Japan --site=Atsumi --turbine=GE15.s这样的语法(如果你想要标志)。

根据我的经验docopt让您重新思考您的计划意识形态,它的作用以及如何实现这一目标。例如,您可以尝试使用

等调用
cover.py cover.pdf --country=Japan --site=Atsumi --turbine=GE15.s
cover.py Japan Atsumi GE15.s

看来你的pdf gerenation得到了照顾,但我也建议:

  • 摆脱raw_input(),如果可以的话 - 你正在使用命令行args
  • 将脚本拆分为执行一项操作的函数,例如准备tex文件和编写pdf文件
  • 使用if __name__ == '__main__':