subprocess模块call和run方法测试,运行环境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, # 超过连接池大小外最多创建的连接,为0表示超过5个连接后,其他连接请求会阻塞 (默认为10)
pool_size=5, # 连接池大小(默认为5)
pool_timeout=30, # 连接线程池中,没有连接时最多等待的时间,不设置无连接时直接报错 (默认为30)
pool_recycle=-1, # 多久之后对线程池中的线程进行一次连接的回收(重置) (默认为-1)
encoding='utf-8',
echo=False # 打印SQL语句
)
def check_data(source_file_no):
# 注意拼接出来的空格要带上
# call和run的第一个参数均不能多字符串
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("数据结果集为空")
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("结果中未查到该数据库")
return True
return False
if __name__ == '__main__':
# 查询传入数据库名是否已创建
check_data("de_mo")
# print("".join(["de"]+"de_mo".split("_")[1:]))
a = os.path.join('/usr/local/bin', 'data') # 自动补全两个路径接口处的 /
a1 = '/usr/local/bin' + 'data'
print(a + "大爷" + a1)
ABSPATH = os.path.dirname(os.path.abspath(__file__))
print("当前目录为" + os.getcwd())
sys.path.append(os.path.join(ABSPATH, "..")) # 当前目录 cd .. 该功能可以直接导入拼接后目录的包
print(os.path.abspath(__file__))
print(ABSPATH)
网友评论