Использование команды bash в модуле Python - PullRequest
0 голосов
/ 25 апреля 2018

Я пытался написать ФУНКЦИЮ (для добавления в МОДУЛЬ), где мне нужно использовать команду "wget" в bash-режиме. например У меня есть эта строка в моей функции,

href_aw =  search_str_1 + collections[1]+ search_str_2 + str(RA) + '+' +  str(Dec) + search_str_3 

!wget -O url_list_dir/wise_allsky.dat "{href_aw}" --no-check-certificate

это работает нормально, пока у меня есть это в функции. Я могу выполнить его и загрузить желаемый файл. Когда я копирую, вставляю свою функцию в модуль и пытаюсь вызвать ее, я получаю сообщение об ошибке

"Файл "/Users/aprakash/Library/Enthought/Canopy/edm/envs/User/lib/python3.5/WISE_photometry_abhi.py", линия 67

! Wget -O url_list_dir / neo_wise.dat "{href_nw}" --no-check-certificate ^ SyntaxError: неверный синтаксис "

Итак, после просмотра некоторого интернета (stackoverflow) я изменил свою команду wget на следующую;

import os 
os.system("wget -O url_list_dir/wise_allsky.dat '{href_aw}' --no-check-certificate")

но это возвращает пустой файл. Любые идеи, как это исправить? Обратите внимание, что я не могу использовать модуль Python Wget и команду, подобную этой;

wget.download(mask_3b, out = img_dir)

, поскольку он не допускает использование таких ключевых слов, как "--no-check-certificate".

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

Спасибо за вашу помощь! Аби

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Я нашел другой способ сделать это.Вышеуказанная задача может быть выполнена в несколько строк, используя «запросы», «io» и «панды».Спасибо за все комментарии, хотя они были полезны, и я даже не слышал о «запросе».

import requests
import pandas as pd
import io
href_aw =  search_str_1 + collections[1]+ search_str_2 + str(RA) + '+' +  str(Dec) + search_str_3 
r_aw  = requests.get(href_aw)
df_aw = pd.read_csv(io.StringIO(r_aw.text))   
df_aw.to_csv(url_list_dir+'wise_allsky.dat')
0 голосов
/ 25 апреля 2018

Возможно попробуйте подпроцесс вместо os.system, так что-то вроде этого:

import subprocess
bashCommand = "wget -O url_list_dir/wise_allsky.dat '{href_aw}' --no-check-certificate"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
...