繁体   English   中英

如何通过python脚本使用设置环境变量作为命令行脚本的参数

[英]How to use set environment variables as argument for command line scripts through python script

我正在编写一个脚本来将文件从一种格式转换为另一种格式,比如从 t1 到 t2。 转换使用 shell 脚本,为了调用它,我需要设置几个变量,然后将文件 (t1) 作为参数传递。 要设置我使用 os.environ 函数的环境变量,我需要使用先前设置的变量路径中的文件。 我曾尝试解释以下情况:

os.environ['var1'] = 'path/to/var1'
os.environ['var2'] = '$var1/path/to/var2'
os.environ['svar'] = 'path/for/files.t1/source'
$var2/script.sh $svar/file.t1 -conv file.t2

考虑路径 P,它的前半部分可以改变,后半部分保持不变。 从上面的代码到 var1 的路径根据要求而变化,到 var2 的路径是恒定的。 组合路径有一个脚本文件,该文件被调用以转换文件。 我需要上面第三行的帮助,我不确定如何在定义的变量(var1,var2)路径中调用文件以及其他参数。 我使用了subprocess.check_call(),但是无法得到正确的语法。 谢谢您的帮助

即使有了新的描述,我也有点迷茫,为什么要将路径作为环境变量和命令行参数传递。

通常两者之一就足够了(取决于要调用的脚本的实现方式)

但如果我正确解释了你的问题,这就是你试图做的。 但也许您只给出了一个 shell 会话示例(来自一个新 shell)来展示您如何手动调用脚本。

我现在也使用os.path.join()而不是+ ,这是加入路径的推荐方式(感谢@Frank Merrow,最初我认为这会使代码更难理解)

请显示任何错误并描述您遇到以下代码的任何问题。

import os
import subprocess
var1 = os.environ['var1'] = 'path/to/var1'
var2 = os.environ['var2'] = os.path.join(var1, 'path/to/var2')
svar = os.environ['svar'] = 'path/for/files.t1/source'
cmd = [ 
    os.path.join(var2, "script.sh"), 
    os.path.join(svar, "file.t1"),
    "-conv",
    "file.t2",
    ]
print("command will be %s" % cmd)  # this line just for debugging
subprocess.call(cmd)

下面是一个 shell 脚本的小例子,看看它会得到什么:

脚本.sh :

#!/bin/sh

echo "I got called with following parameters $*"
echo "\$1 is <$1>" # should be path/for/files.t1/source/file.t1
echo "\$2 is <$2>" # should be -conv
echo "\$4 is <$3>" # should be file.t2
echo "The environment variable 'var1' is <$var1>" # should be path/to/var1
echo "The environment variable 'var2' is <$var2>" # should be path/to/var1/path/to/var2
echo "The environment variable 'svar' is <$svar>" # should be path/for/files.t1/source
var1 = os.environ['var1'] = 'path/to/var1'
var2 = os.environ['var2'] = os.path.join(var1, 'path/to/var2')
svar = os.environ['svar'] = 'path/for/files.t1/source

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM