2016-09-03 3 views
0

Я хочу, чтобы запустить сценарий в оболочке, посылая период времени, каквыполнить период времени в питоне

./test.py 20160830000 201608311100 

Как я могу сделать это для следующего сценария питона? s и t - это временная метка UNIX.

#!/usr/bin/python 
import requests 
from pprint import pprint 
import json 
import os 
import commands 
i = commands.getstatusoutput('date -d "2016-08-30" "+%s"') 
j = commands.getstatusoutput('date -d "2016-08-31" "+%s"') 
s = int(i[1]) 
t = int(j[1]) 
url = 'http://192.168.1.96/zabbix/api_jsonrpc.php' 
payload = { 
    "jsonrpc": "2.0", 
    "method": "history.get", 
    "params": { 
     "output": "extend", 
     "history": 0, 
     "time_from": s, 
     "time_till": t, 
     "hostsids": "10105", 
     "itemids": "23688", 
     "sortfield": "clock", 
     "sortorder": "DESC" 
    }, 
    "auth": "b5f1f71d91146fcc2980e83e8aacd637", 
    "id": 1 
} 

header = { 
    'content-type': 'application/json-rpc', 
} 
res = requests.post(url, data=json.dumps(payload, indent=True), headers=header) 
res = res.json() 
pprint(res) 

ответ

1

Если я правильно понял, вы хотите получить временные метки для использования в вызове jsonrpc из аргументов командной строки, а не использовать жестко установленные даты (которые по какой-либо причине вы обрабатываете через командную строку слишком date, используя устаревшие commands, вместо использования встроенных модулей Python time или datetime модулей, которые могут обрабатывать временные метки и даты изначально).

Это довольно просто. Аргументы командной строки для скрипта Python хранятся в списке sys.argv. Первое значение в списке - это имя файла скрипта, остальные - аргументы. Вам может потребоваться проверить, есть ли ожидаемое число из них!

Попробуйте что-то вроде этого:

# your other imports here 
import sys 

USAGE_MSG = "Usage: test.py START_TIMESTAMP END_TIMESTAMP" 
if len(sys.argv) != 3: 
    print(USAGE_MSG) 
    sys.exit(1) 

try: 
    s = int(sys.argv[1]) 
    t = int(sys.argv[2]) 
except TypeError: # couldn't convert one of the timestamps to int 
    print("Invalid timestamp") 
    print(USAGE_MSG) 
    sys.exit(1) 

# the rest of your code can go here 

Есть много альтернативных способов может обрабатывать проверку ошибок, я только что сделал что-то для этого примера. Конечно, вы должны использовать все, что лучше всего подходит для ваших нужд.

+0

Спасибо, сэр, но я хочу использовать std. time (Формат: YYYYMMDDHHMM) при запуске скрипта. Этот формат должен преобразовываться в временную метку Unix [s и t values] внутри скрипта для использования в json req. – mkdr27

+0

Эта команда вместе с вашим скриптом помогает сортировать ее int (datetime.datetime.strptime ('31082016', '% d% m% Y'). Strftime ("% s")) – mkdr27

0

Посмотрите на модуль time питона, а именно time.strptime функцию для разбора строк времени удобочитаемых во временную структуру и функцию time.mktime для преобразования временной структуры в метку времени Unix.

Смежные вопросы