質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

490閲覧

SyntaxErrorが解消されない

khaii21

総合スコア65

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2022/12/09 02:10

編集2022/12/09 02:40

前提

システムのAPI経由でユーザ登録するスクリプトを作成しています。
接続先のホスト名とパスワードを入力すると該当のエラーメッセージが出力されます。

実現したいこと

該当のエラーメッセージから単純なtypoに思われますがエラーの原因となる箇所が見つけられません。
コード内の問題となる箇所にお気づきの方がいらっしゃいましたらご教授頂けないでしょうか。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "./zabbix_adduser.py", line 69, in <module> add_user_res = literal_eval((Popen(add_user_com, shell=True, stdout=PIPE, stderr=PIPE)).communicate()[0]) File "/usr/lib64/python2.7/ast.py", line 49, in literal_eval node_or_string = parse(node_or_string, mode='eval') File "/usr/lib64/python2.7/ast.py", line 37, in parse return compile(source, filename, mode, PyCF_ONLY_AST) File "<unknown>", line 0 ^ SyntaxError: unexpected EOF while parsing

該当のソースコード

Python2.7.5

1#!/usr/bin/python 2# coding: UTF-8 3 4import sys 5import getpass 6from subprocess import PIPE, Popen 7from ast import literal_eval 8 9# 第一引数に登録したいユーザーリストを指定 10users_list = sys.argv[1] 11 12sys.stdout.write("\nhogeサーバのホスト名またはIPアドレスを入力して下さい: ") 13input_ipadder = str(raw_input().strip()) 14admin_password = getpass.getpass(prompt="パスワードを入力して下さい: ") 15 16# Adminユーザーの情報取得用コマンド 17auth_get_com = "curl -s -d ' \ 18{ \ 19 \"auth\": null, \ 20 \"method\": \"user.login\", \ 21 \"id\": 1, \ 22 \"params\": { \ 23 \"password\": \"" + admin_password + "\", \ 24 \"user\": \"Admin\" \ 25 }, \ 26 \"jsonrpc\": \"2.0\" \ 27} \ 28' -H \"Content-Type: application/json-rpc\" http://" + input_ipadder + "/hoge/api_hoge.php" 29 30# Adminユーザーの情報をhogeサーバから取得してJSON形式に変換 31admin_information = literal_eval((Popen(auth_get_com, shell=True, stdout=PIPE, stderr=PIPE)).communicate()[0]) 32 33# Adminユーザーのauthを取得 34auth = admin_information['result'] 35 36 37with open(users_list, "r") as file: 38 # 1行ずつ読み込んで改行文字を削除 39 for i in file.read().splitlines(): 40 users = i 41 42 # ユーザー作成用コマンド 43 # ユーザーの権限は"type"で設定できる 44 # 1:ユーザー, 2:管理者, 3:Admin 45 # usrgrpidはユーザー認証をするグループIDを指定する 46 47 add_user_com = "curl -s -d ' \ 48 { \ 49 \"jsonrpc\": \"2.0\", \ 50 \"method\": \"user.create\", \ 51 \"params\": { \ 52 \"alias\": \"" + users + "\", \ 53 \"lang\": \"ja_JP\", \ 54 \"type\": \"3\", \ 55 \"usrgrps\": [ \ 56 { \ 57 \"usrgrpid\": \"14\" \ 58 } \ 59 ] \ 60 }, \ 61 \"auth\": \"" + auth + "\", \ 62 \"id\": 1 \ 63 } \ 64 ' -H \"Content-Type: application/json-rpc\" http://" + input_ipadder + "/hoge/api_hoge.php" 65 66 67 # ユーザー作成コマンドの実行結果を取得してJSON形式に変換後判定 68 add_user_res = literal_eval((Popen(add_user_com, shell=True, stdout=PIPE, stderr=PIPE)).communicate()[0]) 69 if ("result" in add_user_res): 70 print("Add user: " + users) 71 elif ("error" in add_user_res): 72 print(add_user_res["error"]["data"]) 73 else: 74 print(add_user_res) 75 76 77sys.exit()

気づいたこと

コードを消しながら確認していたところ、下記の一文でエラーが発生している様子でした。
何かお気づきのことが御座いましたらご教授頂けますと幸いです。

#Adminユーザーの情報をhogeサーバから取得してJSON形式に変換
admin_information = literal_eval((Popen(auth_get_com, shell=True, stdout=PIPE, stderr=PIPE)).communicate()[0])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuma.inaura

2022/12/09 02:18

ローカルでコード行をてきとうに半分ずつ消して試すなどしてみてはいかがでしょうか
khaii21

2022/12/09 02:40 編集

ご確認ありがとうございます。 説明不足で申し訳ございませんでした。 コードを消しながら確認していたところ、下記の1行にエラーが含まれている様子でした。 何かお気づきのことが御座いましたらご教授頂けますと幸いです。 # Adminユーザーの情報をhogeサーバから取得してJSON形式に変換 admin_information = literal_eval((Popen(auth_get_com, shell=True, stdout=PIPE, stderr=PIPE)).communicate()[0])
int32_t

2022/12/09 03:11

literal_eval() の引数としてどんなものが渡っているか確認してください。
dameo

2022/12/09 04:10

その戻り値がpythonの文法に合ってないエラーなのでは?
dameo

2022/12/09 04:12

あ、引数か。何でもないです。
dameo

2022/12/09 04:28

communicate()の戻り値の[1]は(子プロセスの)標準エラー出力だからそれを見てみるといいと思いますよ。
guest

回答1

0

自己解決

yuma.inauraさん
int32_tさん
dameoさん

皆様、色々とご確認ご教授ありがとうございました。
結論ですが解決致しました。
原因はとても恥ずかしいのですが、接続先は当初httpだったのですが
いつの間にかhttpsのみに限定されており、コマンドを実行してもアクセスが出来ない
状態だったため戻り地が空になっていました。
httpsへのリクエストに変更して問題が解決できました。
お騒がせして大変申し訳ございませんでした。

投稿2022/12/09 04:37

khaii21

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問