【问题标题】:Shell command excution on Python2.7Python2.7上的Shell命令执行
【发布时间】:2020-01-03 06:09:10
【问题描述】:

想要验证站点域是否包含“com”。假设我有 shell 变量作为

export FIRST_URL="http://www.11111.com" 
export SECOND_URL="http://www.22222.org"

用户使用参数(部分shell变量)调用Python脚本

python2.7  FIRST     # OR
python2.7  SECOND 

Python 脚本是,

import sys, os, subprocess

PART_URL = sys.argv[1]
print( "PART_URL=",PART_URL)

COMPLETE_URL = PART_URL+'_URL'       # Formed a full shell varibale
cmd_str='echo {} | grep \"com\".format(COMPLETE_URL)'  # equivalent to echo $FIRST_URL | grep com

my_site=subprocess.check_output(cmd_str, shell=True)   # Note we cant use subprocess.run() in Python Python 2.7
print("The validated Site is ", my_site)

输出应该是“验证的站点是http://www.11111.com

【问题讨论】:

  • 为什么不直接将 URL 本身作为参数传递呢?为什么你要向grep 发送检查格式而不是在脚本本身中进行验证?

标签: python-2.7 shell subprocess


【解决方案1】:

参考How to access environment variable values?

$ export FIRST_VAR="http://www.11111.com"
$ python
>>> foo = 'FIRST'
>>> print os.environ[foo + '_VAR']
http://www.11111.com
>>>

【讨论】:

  • 感谢您的回复,但您尚未完整阅读查询,1)一部分是形成动态环境字符串,2)第二部分是获取该创建的环境的值。
  • 我确实读过 :) 也许我应该添加更多说明。 1.动态变量名:上面的完整代码sn-p我还没贴。我已将 foo 硬编码为值 FIRST,但您可以从 sys.argv[1] 中读取这些内容,添加预定义的后缀(在本例中为 _VAR)并获取完整的变量名称。 2. 检索值: os.environ[foo + '_VAR'] 将获取创建的环境变量的值。
  • 谢谢,我想看看带有 subprocess.check_output(cmd_str, shell=True) 的代码行,什么是 cmd_str?可以发一下吗?
  • os.environ 直接让您访问环境变量的值。既然有更简单的方法,为什么还要启动另一个进程,运行 echo 并获取输出?
  • 我编辑了上面的脚本来验证站点是否包含“com”。请看一下。
【解决方案2】:

想通了,

COMPLETE_URL = PART_URL+'_URL'     
cmd_str='echo ${} | grep \'com\'.format(COMPLETE_URL)' 
my_site=subprocess.check_output(cmd_str, shell=True)  

或者,我们可以使用,

my_site=subprocess.call(shlex.split(cmd_str))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 2013-01-05
    • 2010-09-14
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多