【问题标题】:lua run a shell command with parameters doesn't worklua运行带参数的shell命令不起作用
【发布时间】:2021-05-30 06:00:44
【问题描述】:

我正在尝试从 lua 脚本执行命令。该命令是简单地运行一个名为“sha_compare.py”的python脚本,其中接收3个参数,其中两个是来自lua脚本的变量 - dady_data和sha:

local method = ngx.var.request_method
local headers = ngx.req.get_headers()

if method == "POST" then
   ngx.req.read_body()
   local body_data = ngx.req.get_body_data()
   local sha = headers['X-Hub-Signature-256']
   ngx.print(os.execute("python3 sha_compare.py"..sha..body_data))
else

由于我调用参数的方式,脚本失败了。如果我从 cmd 运行它,实际的命令应该是这样的:

python3 python3 sha_compare.py sha256=ffs8df aaaaa

请告诉我应该如何更改我的代码以正确调用具有 3 个变量的 python 脚本。

如果不可能或难以实现,请告诉我如何调用 .sh 脚本来接收这 3 个参数。

【问题讨论】:

  • body_data 里面有什么?它是否包含对 shell 来说“神奇”的字符?

标签: python shell lua


【解决方案1】:

您没有在参数之间提供空格:您正在尝试执行

python3 sha_compare.pysha256=ffs8dfaaaaa

这样做:

os.execute("python3 sha_compare.py "..sha.." "..body_data)

将命令构建为表格通常更容易,并将其连接起来执行:

local cmd = { 'python3', 'sha_compare.py', sha, body_data }
os.execute(table.concat(cmd, " "))

【讨论】:

  • os.execute("python3 sha_compare.py "..sha.." "..body_data) 不起作用,甚至无法编译。我得到错误服务器 500。并且 table 选项返回 512...
  • 我为脚本名称添加了完整路径。现在收到错误 256。
  • body_data 是否包含空格和/或引号?如果是这样,您必须确保为 shell 正确引用该值。
  • 你也可以看看这个帖子吗?这对我来说至关重要。谢谢。 stackoverflow.com/questions/66527896/…
猜你喜欢
  • 2019-08-15
  • 2014-02-11
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2012-11-28
相关资源
最近更新 更多