sherlock.py的命令与linux命令行和java进程api的解释不同

sherlock.py的命令与linux命令行和java进程api的解释不同,java,Java,听起来有点奇怪,不是吗? 我正在从事一个项目- 我需要使用Java进程API运行这个程序 下面是程序的用法 $ python3 sherlock.py --help usage: sherlock.py [-h] [--version] [--verbose] [--rank] [--folderoutput FOLDEROUTPUT] [--output OUTPUT] [--tor] [--unique-tor] [--csv] [

听起来有点奇怪,不是吗? 我正在从事一个项目- 我需要使用Java进程API运行这个程序

下面是程序的用法

$ python3 sherlock.py --help
usage: sherlock.py [-h] [--version] [--verbose] [--rank]
               [--folderoutput FOLDEROUTPUT] [--output OUTPUT] [--tor]
               [--unique-tor] [--csv] [--site SITE_NAME]
               [--proxy PROXY_URL] [--json JSON_FILE]
               [--proxy_list PROXY_LIST] [--check_proxies CHECK_PROXY]
               [--timeout TIMEOUT] [--print-found]
               USERNAMES [USERNAMES ...]
我在使用用户名方面有问题。 当我在命令行中指定一个有空白的用户名时,它工作得很好(空白解释得很好)。注意属性检查用户名

// command to be executed
python3 ${SHERLOCK_HOME}/sherlock.py --print-found --timeout 10 "skoriy serhii"

[*] Checking username skoriy serhii on:
[+] 500px: https://500px.com/skoriy serhii
[-] Error Connecting: Aptoide
[-] Error Connecting: Basecamp
[+] CapFriendly: https://www.capfriendly.com/users/skoriy serhii
但是,当我使用Java Process API时,我得到以下信息:

// command to be executed
python3 /home/gorilla/sherlock/sherlock.py --print-found --timeout 10 "skoriy serhii" 

[*] Checking username "skoriy on:
[+] 500px: https://500px.com/"skoriy
[-] Error Connecting: Aptoide
[-] Error Connecting: Basecamp
[+] Bookcrossing: https://www.bookcrossing.com/mybookshelf/"skoriy/
[+] CapFriendly: https://www.capfriendly.com/users/"skoriy
[-] Error Connecting: Carbonmade
[+] CashMe: https://cash.me/$"skoriy
[+] Chatujme.cz: https://profil.chatujme.cz/"skoriy
[+] Cloob: https://www.cloob.com/name/"skoriy
[-] Error Connecting: Crevado
正如您所看到的,username参数的解释存在一些问题。 下面是java代码

public class Main {

public static void main(String[] args) {
    try {
        CommandBuilder commandBuilder = new CommandBuilder();
        String command = commandBuilder.user("skoriy serhii").build();
        System.out.println(command);
        Process process = Runtime.getRuntime().exec(command);
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = null;
        while ((line = reader.readLine()) != null)
            System.out.println(line);
        process.destroy();
        if (process.isAlive())
            process.destroyForcibly();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

//CommandBuilder.java
public class CommandBuilder {

private final static String BASE = "python3 /home/gorilla/sherlock/sherlock.py --print-found --timeout 10";
private StringBuffer buffer = new StringBuffer();

public CommandBuilder user(String user) {
    buffer.append(" \"" + user + "\" ");
    return this;
}

public String build() {
    return BASE + new String(buffer);
}

}

使用
ProcessBuilder
,除非您怀念传统API(并创建自己的非工作CommandBuilder)。@Kayaman,罗杰it@Kayaman:另外,
ProcessBuilder
有许多改进的功能,在这种情况下,另一个重载
Runtime.exec(String[])
可以工作。只有
exec(String)
完成的标记化几乎与shell完全不同。