【问题标题】:need to pass parameter to Unix script at run time [duplicate]需要在运行时将参数传递给Unix脚本[重复]
【发布时间】:2021-10-12 06:46:05
【问题描述】:

我有需要用 python 变量初始化的 shell 代码

注意:var 是一个 python 变量,它保存值/d/demo/f.txt

需要将python变量var传递给我下面的shell脚本

var='/d/demo/f.txt'

script="""

( 
echo "From : xyz"
echo "To : xyz"
cat var
) |sendmail -t 

"""
os.system("bash -c '%s' % script ")

分配的var值没有传递给cat var 任何解决方案表示赞赏

【问题讨论】:

  • 你为什么用os.system()发送邮件? Python 有这方面的库。
  • @Barmar : 因为我没有安装库并且它被限制安装
  • 嗯? emailsmtplib 与 Python 本身一起安装。
  • 除非文件以空行开头,否则您的脚本已损坏。冒号前的空格也很不规则,虽然我猜他们不会阻止传递。

标签: python unix


【解决方案1】:

使用 f 字符串将变量替换到脚本中。使用shlex.quote() 转义它以防它有特殊字符。

import shlex

var='/d/demo/f.txt'
from='xyz'
to='xyz'

script=rf"""

( 
printf 'From: %s\nTo: %s\n' {shlex.quote(from)} {shlex.quote(to)}
cat {shlex.quote(var)}
) |sendmail -t 

"""
os.system(script)

【讨论】:

  • 我将其添加到答案中。不需要bash -c
  • @Barmar : 如果我想将变量用于 From 和 To 电子邮件 id 的相同 shlex 报价将起作用
  • 是的,为什么会有所不同?
  • @Barmar :答案似乎很有趣,将在我的环境中测试是否可以在运行时创建 python 函数并将参数传递给 embed Unix 脚本。据我所知,大部分时间我都尝试使用 .sh 创建 bas 脚本并使用 os.system(sh script.sh) 在 python 中调用
  • @codeholic24 : 你能检查一下并与我分享脚本吗,这对我会有帮助
猜你喜欢
  • 1970-01-01
  • 2011-05-30
  • 2018-10-16
  • 1970-01-01
  • 2013-07-10
  • 2016-05-15
  • 2014-12-25
  • 1970-01-01
  • 2019-07-07
相关资源
最近更新 更多