Python json.load()在PHP exec()

时间:2018-03-23 20:56:53

标签: php python json exec


我有一个python脚本,我希望使用exec()函数从PHP运行。 Python脚本的作用是从Web API获取一些数据,将数据存储在临时文件中,然后读取文件并将一些数据放入csv文件中。当我单独测试时,脚本运行正常。现在,我想通过exec()运行它。当我第一次尝试时,我认为该脚本根本没有运行,但后来我看起来更进一步,并意识到脚本实际上正在运行,但在执行期间停在某处。

然后我尝试将输出重定向到带有> output.txt的txt文件,以查看它出错的地方。当我检查文件并调试一下时,我意识到问题是我的Python脚本中的函数json.load()。奇怪的是,在output.txt文件中,没有显示错误消息。

以下是output.txt文件的样子。

output.txt

这是包含json.load()的python函数。

def get_json_files_data(path, min = 1):

    json_files = find_files(path, "json", min)
    json_data = dict()

    print("===========================================")
    print("= Converting JSON data into Python object =")
    print("===========================================")

    for file in json_files:
        base = os.path.basename(file) # name with extension (ex. 'file.json')
        id = os.path.splitext(base)[0] # name without extension (ex. 'file') in this case, the names are the trip ids
        opened_file = open(file)
        print(10)
        json_data[id] = json.load(opened_file)  # get the json data as a python dict
        print(11)
    return json_data

我还尝试将json文件的权限更改为777,但这并不能解决问题。

有没有人有任何想法?如果需要更多代码,请告诉我。

非常感谢

1 个答案:

答案 0 :(得分:0)

我终于成功了。如果有人想知道,这就是解决方案。

问题在于编码。根据我运行脚本的方式,它在某种程度上有所不同。我所做的只是用encoding='utf-8'指定编码。这是我的代码现在的样子。

def get_json_files_data(path, min = 1):

    json_files = find_files(path, "json", min)
    json_data = dict()

    print("===========================================")
    print("= Converting JSON data into Python object =")
    print("===========================================")
    for file in json_files:
        base = os.path.basename(file) # name with extension (ex. 'file.json')
        id = os.path.splitext(base)[0] # name without extension (ex. 'file') in this case, the names are the trip ids
        with open(file, 'r', encoding='utf-8') as opened_file:
            json_data[id] = json.load(opened_file)  # get the json data as a python dict

    return json_data