subprocess模塊call和run方法測(cè)試,運(yùn)行環(huán)境windows
# -*- coding: utf-8 -*-
import subprocess
import os
import pandas as pd
from sqlalchemy import create_engine
import sys
engine = create_engine("mysql+pymysql://root:root@10.1.60.110:3306/datax?charset=utf8mb4",
max_overflow=0, # 超過連接池大小外最多創(chuàng)建的連接,為0表示超過5個(gè)連接后,其他連接請(qǐng)求會(huì)阻塞 (默認(rèn)為10)
pool_size=5, # 連接池大?。J(rèn)為5)
pool_timeout=30, # 連接線程池中,沒有連接時(shí)最多等待的時(shí)間,不設(shè)置無連接時(shí)直接報(bào)錯(cuò) (默認(rèn)為30)
pool_recycle=-1, # 多久之后對(duì)線程池中的線程進(jìn)行一次連接的回收(重置) (默認(rèn)為-1)
encoding='utf-8',
echo=False # 打印SQL語句
)
def check_data(source_file_no):
# 注意拼接出來的空格要帶上
# call和run的第一個(gè)參數(shù)均不能多字符串
sql = ("\"show", " databases\"")
sql2 = "show databases"
# all_data = engine.execute(sql)
cmd = ("mysql ", "-uroot ", " -proot ", "-e ")
cmd2 = "mysql -uroot -proot -e "
subprocess.call([cmd, sql])
# 兩種寫法
# result = subprocess.run(["mysql", "-uroot", "-proot", "-e", "show databases"] , shell=True, capture_output=False)
result = subprocess.run([cmd, sql], shell=True, capture_output=True)
if result.returncode != 0:
print("數(shù)據(jù)結(jié)果集為空")
return True
mysql_database_info = pd.DataFrame(
[i for i in result.stdout.decode(encoding='UTF_8', errors='strict').split('\r\n') if i.strip() != ''],
columns=['database_name'])
if "".join(["de"] + source_file_no.split("_")[1:]) not in mysql_database_info['database_name'].values:
print("結(jié)果中未查到該數(shù)據(jù)庫(kù)")
return True
return False
if __name__ == '__main__':
# 查詢傳入數(shù)據(jù)庫(kù)名是否已創(chuàng)建
check_data("de_mo")
# print("".join(["de"]+"de_mo".split("_")[1:]))
a = os.path.join('/usr/local/bin', 'data') # 自動(dòng)補(bǔ)全兩個(gè)路徑接口處的 /
a1 = '/usr/local/bin' + 'data'
print(a + "大爺" + a1)
ABSPATH = os.path.dirname(os.path.abspath(__file__))
print("當(dāng)前目錄為" + os.getcwd())
sys.path.append(os.path.join(ABSPATH, "..")) # 當(dāng)前目錄 cd .. 該功能可以直接導(dǎo)入拼接后目錄的包
print(os.path.abspath(__file__))
print(ABSPATH)