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

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

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

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

Q&A

解決済

SyntaxErrorが解消されない

khaii21
khaii21

総合スコア21

Python 2.7

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

1回答

0グッド

0クリップ

187閲覧

投稿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])

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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]は(子プロセスの)標準エラー出力だからそれを見てみるといいと思いますよ。

回答1

0

自己解決

yuma.inauraさん
int32_tさん
dameoさん

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

投稿2022/12/09 04:37

khaii21

総合スコア21

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 2.7

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