接受用户变量并使用python创建template.py [2,7] [redhat 6.7]

时间:2017-06-01 14:11:11

标签: python shell unix scripting

场景:我有一个test.py文件,其中包含以下代码。

import json
import os
import sys
def check()
    url = os.popen("curl api.openweathermap.org/data/2.5/weather?id=2172797 2>dev/null")
    uri = json.loads(url)
    f_check = file("/home/1/file1.txt",'r')
    f_data = f_check.read()
    chk_data = int(f_data)
    f1 = open("file1.txt", "w")
    n1 = f1.write(str(uri) + "\n")
    f1.close()

在上面提到的test.py文件位于“/ home / check”的位置我想用它作为模板文件,可以用于在不同位置部署其他用途说“/ home / word”只是改变它中的一些变量,如用户将提供的url和file1.txt文件位置。 我找不到方便的方法。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

问题:...更改其中的一些变量,如url和file1.txt文件位置

目前还不清楚你想对chk_data做些什么。 尝试了您的示例代码,发现您正在阅读chk_data,但之后无所事事。请编辑您的问题,并通过示例数据更详细地解释。

此示例可用于不同的urlfile lcationfilename

  

注意:我使用module urllib代替os.popen("curl...

第一个解决方案,从终端窗口传递参数:

import urllib.request
import urllib.parse

def check(url, params, filename):
    params = urllib.parse.urlencode(params)
    url = "{}?{}".format(url, params)

    with urllib.request.urlopen(url) as f:
        json_response = json.loads(f.read().decode('utf-8'))

    with open(filename, 'w') as f_out:
        f_out.write(str(json_response))

if __name__ == '__main__':
    url = sys.argv[1]
    params = {}
    for param in sys.argv[2].split(' '):
        key, value = param.split('=')
        params[key] = value

    if url == 'openweathermap.org':
        url = 'http://samples.openweathermap.org/data/2.5/weather'
        params['appid'] = 'b1b15e88fa797225412429c1c50c122a1'

    check(url, params, sys.argv[3])
  

<强>用法

:#  python openweathermap.org "id=2172797" /home/word/my_file.txt

第二个解决方案,将test.py用作module的{​​{1}}。{
新Python脚本中的参数。

  

注意:这需要import check中的home.check.test

创建新的PYTHONPATH文件,例如*.py

openweathermap.py
  

<强>用法

from home.check.test import check

if __name__ == '__main__':
    url = 'http://samples.openweathermap.org/data/2.5/weather'
    params = {'id':'2172797', 'appid':'b1b15e88fa797225412429c1c50c122a1'}
    check(url, params, '/home/word/my_file.txt')

使用Python测试:3.4.2