在Python模块中使用bash命令

时间:2018-04-25 01:02:33

标签: python module wget

我一直在尝试编写一个功能(要添加到MODULE中),我需要使用" wget" bash-mode中的命令。例如我在我的函数中有这一行,

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检查证书       ^ 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"这样的关键字。我必须使用它。

我不明白如果某些功能完全正常,因为函数只会因为从模块中调用而产生错误。我想重复一遍,如果我在编写它的同一个脚本中使用该函数,第一个命令就可以正常工作。

感谢您的帮助! ABHI

2 个答案:

答案 0 :(得分:0)

我找到了另一种方法。上述任务可以使用"请求",' 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')

答案 1 :(得分:-1)

也许尝试使用subprocess而不是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()