首页 > 其他分享 >Rust 任务二传手

Rust 任务二传手

时间:2023-08-28 13:56:29浏览次数:20  
标签:二传手 unwrap 任务 let str arg txt id Rust

 

use postgres::{Client, NoTls};
use std::process::Command;
use std::fs::File;
use std::io::{BufRead, BufReader, Write};

fn  is_program_running(program: &str) ->bool {
    let cmdstr = format!("IMAGENAME eq {}", program);
    let output = Command::new("cmd")
                    .arg("/S")
                    .arg("/c")
                    .arg("tasklist")
                    .arg("/FI")
                    .arg(cmdstr)
                    .output()
                    .expect("-1");
    let output_str = String::from_utf8_lossy(&output.stdout);
    let result = match output_str.find(program) {
        Some(_) => true,
        None => false
    };
    result
}

fn trigger_scheduled_task(taskname: &str) {
    let cmdstr = format!("schtasks /RUN /TN {}", taskname);
    Command::new("cmd")
                .arg("/S")
                .arg("/c")
                .arg(cmdstr)
                .output()
                .expect("-1");
}

fn main() -> Result<(), postgres::Error> {
    //数据库TODO
    let mut client = Client::connect("host=localhost dbname=test user=postgres password=postgres", NoTls)?;
    loop {
        if is_program_running("notepad.exe") == false {     //notepad TODO
            for row in client.query(r"select cast(id as varchar) as id, tasktype 
                                                    from saptask 
                                                    where status='ongoing'", &[])? {
                let id: &str = row.get(0);
                let tasktype: &str = row.get(1);
                let logpath = match tasktype {      // address TODO
                    "MM" => r"D:\www\test\log.txt",
                    "BOM" => r"D:\www\test\log.txt",
                    _ => r"D:\www\test\log.txt",
                };
                let file = File::open(logpath).unwrap();
                let reader = BufReader::new(file);
                for line in reader.lines() {
                    let linestr = line.unwrap_or_else(|_|{"".to_string()});
                    match &linestr.find("programfinished") {
                        Some(_) => {
                            let endtime = linestr.replace(" > programfinished ;", "");
                            let sqlid = str::parse::<i32>(&id).unwrap();
                            client.execute("update saptask 
                                                    set endtime=$1,status='done' 
                                                    where id=$2", &[&endtime, &sqlid])?;
                        },
                        _ => {}
                    }
                }
            }
        } 

        for ongoingtask in client.query(r"select cast(count(id) as varchar) as q 
                                                            from saptask 
                                                            where status='ongoing'", &[])? {
            let q :&str= ongoingtask.get(0);
            if q.parse::<i32>().unwrap() == 0 {
                for taskrow in client.query(r"select tasktype, taskfilepath 
                                                                from saptask 
                                                                where status='pending' 
                                                                order by id asc 
                                                                limit 1", &[])? {
                    let tasktype: &str = taskrow.get(0);
                    let taskfilepath: &str = taskrow.get(1);
                    match tasktype {        // 1. 替换程序名称
                        "MM" => {
                            // 将newtaskaddr写入对应程序的txt文件里.然后去执行这个任务. 
                            let newaddr= "D:/test/hello_rust.txt";                          //TODO
                            let mut f = File::create(newaddr).unwrap();
                            f.write_all(taskfilepath.as_bytes()).unwrap();
                            println!("MM");},
                        "BOM" => {
                            // 将newtaskaddr写入对应程序的txt文件里.然后去执行这个任务. 
                            let newaddr= "D:/test/hello_rust.txt";                          //TODO
                            let mut f = File::create(newaddr).unwrap();
                            f.write_all(taskfilepath.as_bytes()).unwrap();
                            println!("BOM");
                            trigger_scheduled_task("do");
                        },
                        _ => {}
                    }
                }
            }
        }
    }
}  

  

标签:二传手,unwrap,任务,let,str,arg,txt,id,Rust
From: https://www.cnblogs.com/pythonClub/p/17662090.html

相关文章

  • rust 从Result< T,T>获取值T
    问:我有一个函数:fnfoo<i32>(x:i32)->Result<i32,i32>{...}我想把结果的值提取到一个变量中,不管它是Ok还是Err。我可以这样做:letval=matchfoo(10){Ok(i)=>i,Err(i)=>i,}想知道是否有一个“更干净”或更“习惯”的方法来这样做,或者这是最......
  • 实用指令_实操作_任务调度常用案例
    crond任务调度实例crond相关指令:###1.终止任务调度crontab-r###2.列出当前有哪些任务调度crontab-l###3.重启任务调度servicecrondrestart应用实例###eg1:每隔1分钟,就将当前的日期信息追加到/tmp/mydate文件中###eg2:每隔1分钟,就将当前日期和日历追加到/ho......
  • 实用指令_实操作_任务调度基本说明
    crond任务调度任务调度:是指系统在某个时间执行的特定的命令或者程序任务调度分了:1.系统工作:有些重要的工作必须周而复始的执行,如病毒扫描等;2个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。基本语法crontab{选项}常用选项选项描述-e......
  • Rust 执行postgresql
    postgres="0.19.2"usepostgres::{Client,NoTls};fnmain()->Result<(),postgres::Error>{letmutclient=Client::connect("host=localhostdbname=testuser=postgrespassword=postgres",NoTls)?;client.batch_exec......
  • SCHTASKS 执行计划任务
    不正确:schtasks/create/tn"MySQLAutomaticBackup"/tr"d:\pathwithspacestomyscript\myscript.bat"/scdaily...  正确:schtasks/create/tn"MySQLAutomaticBackup"/tr"\"d:\pathwiths......
  • CMD命令如何创建计划任务,创建完成即刻运行只运行一次后删除任务
    解决方案:1.创建bat文件,任务命令如下schtasks/create/TN名称/TR运行程序路径/SC指定计划频率设为用户登入时运行schtasks/create/TNupdate/TRD:\Dir\bz2.exe/SCONLOGON12.立刻执行schtasks/run/tnupdate3.删除任务SCHTASKS/Delete/TNupdate/F4.完整关......
  • c# Quartz 启动定时任务后不要立即执行
    想整个定时预警检测任务,想每隔5分钟检测一次,但发现这个Quartz启动后,会立即执行一次,但我不想马上执行,想5分钟后再执行百度了Java的有个WithMisfireHandlingInstrucionDoNothing方法,但c#里面没有,我试了全部WithMisfireHandlingInstrucionXXXX方法,都没用,都会立即执行后面只能用star......
  • rust command::new()
     usestd::process::Command;fnmain(){letcmd_str:String;cmd_str="tasklist/FI'IMAGENAMEeqnotepad.exe'".to_string();letoutput=Command::new("cmd").arg("/c")......
  • 关于自建Rustdesk 远程桌面服务器的公网访问:无法连接中继服务器的问题解决方法
    自建服务器位于内网时,内网客户端ID/中继的地址通常写成内网IP,外网客户端一般会用公网IP进行端口映射,但这样设置出现外网客户端无法连接中继服务器,但内网客户端使用正常的现象。经过半天的排查分析,当内网和外网填写的自定义服务器地址时,rust服务器无法识别出需要使用nat包的地址,默......
  • Spark任务提交到Yarn状态一直是Accepted
    现象今天提交Spark任务到Yarn集群,但是任务状态一直是Accepted:23/08/2514:59:55INFOClient:Applicationreportforapplication_1692971614101_0018(state:ACCEPTED)原因前端时间也遇到这个问题,是因为Yarn集群健康节点是0,不健康的节点点进详情显示:1/1local-......