如何在python程序中使用shell脚本?

2024-10-03 21:31:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一个python程序中使用一个C-shell脚本,它使用两个参数

os.system("recall 20170121 ../E725.txt xy 1")

但是我想将它用于堆栈,所以声明了如下所示的变量,但是当我在脚本中调用它们时,它给出了一个错误,即输入文件不存在。如何调用变量

date_ID=(filename[17:25])
fullpath = '../%s' % (filename)
os.system("import_S1_TOPS_modified $date_ID $fullpath vv 1")

Tags: 程序txt脚本id参数date堆栈os
1条回答
网友
1楼 · 发布于 2024-10-03 21:31:44

shell不知道Python变量,因为它是一个完全不同的系统。因此不能使用shell的变量替换机制($date_ID)。相反,您必须将它们作为Python字符串传递:

os.system("import_S1_TOPS_modified %s %s vv 1" % (date_ID, fullpath))

注意,这段代码有一个严重的问题:如果有人把; rm -rf /;作为filename怎么办?该命令现在看起来像:

import_S1_TOPS_modified 20181021; rm -rf /; vv 1

这将删除所有内容

这就是为什么使用subprocess是一个更好的主意,它根本不会使用shell,也不会受到此类问题的影响:

subprocess.call(['import_S1_TOPS_modified', date_ID, fullpath, 'vv', '1'])

如果必须使用shell,则使用shlex.quote()并添加shell=True

subprocess.call("import_S1_TOPS_modified %s %s vv 1" % (
    shlex.quote(date_ID), shlex.quote(fullpath)),
    shell=True)

相关问题 更多 >