【问题标题】:Python Bash script startPython Bash 脚本启动
【发布时间】:2020-09-27 12:16:53
【问题描述】:

基本上,我正在尝试使用 Python 运行多处理,这将利用 telnet 到服务器以发送 HTTP 请求。该请求记录在 request.txt 完整请求中,带有标头。

在我的 python 代码中,我测试了完整的多处理,它就像魔术一样工作。但是,一旦放置在服务器中,bash 命令就无法正确执行。

我试图在 Python 中复制的是以下 bash 示例:

START=
 (
 cat request.txt 
 sleep 2
 )| telnet 0 999

我在 python 源代码中所做的是:

os.system("START=\
 (\
 cat request.txt \
 sleep 2 \
 )| telnet 0 999\
 ")

我得到的是:

Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
Connection closed by foreign host.

当我通过 bash 终端手动运行请求时,它运行完美,没有错误。但是,当尝试执行 python 应用程序时,它会给出上述行为。

P/S 我没有发布完整源代码的原因是因为我的问题仅与 os.system 相关——应用程序的 bash 部分。

谢谢

【问题讨论】:

  • ...为什么你要使用 telnet 发送这个而不是使用 socket 模块?
  • 已经有非常好的生成 HTTP 请求的库了:你为什么不使用它们?
  • @AKX Python 本来就是一个很好的胶水语言,通过 Python 运行 shell 脚本肯定没问题。
  • @alec_djinn,你错了。作为一个热爱 Python 的人,我这么说。以与使用 bash 相同的方式使用它是一种可怕的语言。是的,这样做是“可以的”,但当然不建议这样做。请参阅前两个 cmet,如果可以的话,我会多次投票。
  • @AKX,我正在连接的服务器使用的是 HTTP xml rpc 协议,我会尝试连接它,如果你有任何有价值的资源,请分享。谢谢

标签: python bash telnet


【解决方案1】:

我不知道这是否是您问题的答案。但是查看您的代码,您的多行字符串的计算结果为START=( cat request.txt sleep 2 )| telnet 0 999。所以cat request.txt sleep 2 是一个命令。这可能是问题的原因。您可以在cat request.txt 之后添加; 并尝试。

顺便建议在python中对多行字符串使用三引号,而不是用\转义每一行

添加工作解决方案:

os.system('''START=
     (
     cat vsip.txt;
     sleep 2 
     )| telnet 0 999
     ''')

【讨论】:

  • 这显然是代码中的错误,所以我添加了这个作为答案。但如果此修复对您遇到的问题没有帮助,请发表评论
  • 谢谢,伙计。我已经用适合我的正确格式更新了您的答案,供任何人参考。
猜你喜欢
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多