最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux Bash調(diào)用Python和Java代碼過(guò)程

 更新時(shí)間:2025年11月11日 09:20:25   作者:fengyehongWorld  
本文介紹了如何在Linux和Windows系統(tǒng)中使用Bash調(diào)用Python和Java程序,并詳細(xì)解釋了Bash腳本中的命令與路徑判斷、調(diào)用Python和Java代碼以及重點(diǎn)語(yǔ)法解析

一. 前提條件

PythonSource.py

  • 目前大多數(shù)的Linux系統(tǒng)中都會(huì)預(yù)裝Python
  • 部分使用Bash來(lái)實(shí)現(xiàn)比較麻煩的代碼,可以使用Python來(lái)實(shí)現(xiàn),然后使用Bash來(lái)調(diào)用即可。
import sys

# python代碼進(jìn)行計(jì)算
x = 10
# 打印需要被bash獲取的信息
print(x * 2)

"""
設(shè)置返回碼
    成功返回 0
    失敗返回 1
"""
sys.exit(0)

JavaSource.java

  • Java并不是腳本語(yǔ)言,因此必須編譯之后才能被調(diào)用
public class JavaSource {

    public static void main(String[] args) {
        // 打印需要被Bash獲取的信息
        int x = 10;
        System.out.println(x * 2);
        // 設(shè)置退出碼, 方便Bash獲取java程序的執(zhí)行結(jié)果
        System.exit(0);            
    }
}

Windows上雖然無(wú)法直接使用Bash,但是基本上程序員的電腦上都會(huì)安裝Git,通過(guò)Git for Bash可以使用Bash,上述語(yǔ)言書(shū)寫(xiě)的程序就可以通過(guò)Bash來(lái)直接雙擊.sh文件來(lái)執(zhí)行了。

二. Bash代碼實(shí)現(xiàn)

2.1 命令與路徑判斷部分

#!/usr/bin/env bash

# 判斷java命令是否被安裝
if ! command -v java >/dev/null 2>&1; then
    echo "【java】命令并沒(méi)有被安裝, 請(qǐng)確認(rèn)!"
    exit 1
fi

# 判斷python命令是否被安裝
if ! command -v python >/dev/null 2>&1; then
    echo "【python】命令并沒(méi)有被安裝, 請(qǐng)確認(rèn)!"
    exit 1
fi

# 獲取當(dāng)前腳本的絕對(duì)路徑
SCRIPT_PATH="$(readlink -f "${BASH_SOURCE[0]}")"
# 根據(jù)腳本的絕對(duì)路徑獲取腳本所在目錄的絕對(duì)路徑
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"

# 拼接python代碼所在的路徑
PYTHON_FILE_PATH="$SCRIPT_DIR/00-source/PythonSource.py"
# 拼接java代碼所在的路徑
JAVA_FILE_PATH="$SCRIPT_DIR/00-source/JavaSource.java"

2.2 調(diào)用Python代碼部分

# 在bash中調(diào)用python代碼, 獲取其輸出值和退出碼
python_result=$(python "$PYTHON_FILE_PATH")
# 獲取退出碼必須要在獲取返回值之前, 否則echo命令打印了返回值之后, Bash捕獲的就不是python的退出碼而是echo命令的執(zhí)行狀態(tài)了
echo "Python程序的退出碼是: $?"
# 獲取python的打印值
echo "Python程序的結(jié)果是: $python_result"

2.3 調(diào)用Java代碼部分

# 進(jìn)入 Java 文件所在目錄
#   $(dirname $JAVA_FILE_PATH) → 獲取 Java 文件所在目錄
#   pushd <dir>                → 切換到指定目錄,同時(shí)把當(dāng)前目錄 壓入目錄棧
#   >/dev/null                 → 屏蔽 pushd 輸出
#   || exit 1                  → 如果目錄不存在或切換失敗,退出腳本
pushd "$(dirname $JAVA_FILE_PATH)" >/dev/null || exit 1

# 編譯java代碼(指定使用UTF-8編譯, 防止windows中默認(rèn)使用GBK編碼)
# 編譯之后會(huì)在當(dāng)前目錄下生成一個(gè).class文件
javac -encoding UTF-8 "$JAVA_FILE_PATH"
if [ $? -ne 0 ]; then
    echo "編譯失??!"
    # popd → 從目錄棧彈出上一個(gè)目錄,并切換回去
    # >/dev/null → 屏蔽輸出
    popd >/dev/null
    exit 1
fi

# 從絕對(duì)路徑中獲取java不帶后綴的文件名
JAVA_FILE_BASENAME=$(basename "$JAVA_FILE_PATH" '.java')
echo '____________________________________'
echo "$JAVA_FILE_PATH"
echo "$JAVA_FILE_BASENAME"
echo ' ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄'

# 執(zhí)行編譯后的java代碼
java_result=$(java "$JAVA_FILE_BASENAME")
echo "Java程序的退出碼是: $?"
# 獲取java的打印值
echo -e "java程序的結(jié)果是: $java_result\n"

# 刪除生成的.class文件
sleep 2
rm "${JAVA_FILE_BASENAME}.class"

# 返回到原目錄
popd >/dev/null

# 退出
read -p "→ 腳本執(zhí)行結(jié)束, 按任意鍵結(jié)束 . . . " -n1 -s

三. 重點(diǎn)語(yǔ)法解析

獲取當(dāng)前腳本的絕對(duì)路徑和腳本所在的目錄

SCRIPT_PATH="$(readlink -f "${BASH_SOURCE[0]}")"
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"

移動(dòng)到指定目錄后,退回到原目錄

pushd "$(dirname $JAVA_FILE_PATH)" >/dev/null || exit 1
popd >/dev/null

java并不是腳本語(yǔ)言,必須先編譯才能使用

# 編譯.java文件為.class文件
javac -encoding UTF-8 "$JAVA_FILE_PATH"
# 調(diào)用編譯好的文件,執(zhí)行java代碼
java_result=$(java "$JAVA_FILE_BASENAME")

阻塞窗口,讓使用者看到腳本執(zhí)行結(jié)束的信息提示。

  • -p "..."

在讀取輸入前,顯示提示信息。

  • -n1

只讀取 1 個(gè)字符 就結(jié)束輸入(而不是等用戶(hù)按回車(chē))。

所以用戶(hù)按下任意鍵(比如 a、空格 等)就會(huì)立即繼續(xù)。

  • -s

silent 模式,輸入時(shí)不會(huì)在終端上顯示出來(lái)。

read -p "→ 腳本執(zhí)行結(jié)束, 按任意鍵結(jié)束 . . . " -n1 -s

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springcloud alibaba nacos linux配置的詳細(xì)教程

    springcloud alibaba nacos linux配置的詳細(xì)教程

    這篇文章主要介紹了springcloud alibaba nacos linux配置,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Linux下yum常用命令匯總

    Linux下yum常用命令匯總

    yum(全稱(chēng)為 Yellow dog Updater, Modified)是一個(gè)在Fedora和RedHat以及SUSE中的Shell前端軟件包管理器?;禦PM包管理,能夠從指定的服務(wù)器自動(dòng)下載RPM包并且安裝,可以自動(dòng)處理依賴(lài)性關(guān)系,并且一次安裝所有依賴(lài)的軟體包,無(wú)須繁瑣地一次次下載、安裝。
    2014-11-11
  • Linux中使用crond工具創(chuàng)建定時(shí)任務(wù)的方法

    Linux中使用crond工具創(chuàng)建定時(shí)任務(wù)的方法

    這篇文章主要介紹了Linux中使用crond工具創(chuàng)建定時(shí)任務(wù)的方法,本文通過(guò)多種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 如何在Linux系統(tǒng)中進(jìn)行CPU、內(nèi)存、磁盤(pán)和網(wǎng)卡的性能測(cè)試?

    如何在Linux系統(tǒng)中進(jìn)行CPU、內(nèi)存、磁盤(pán)和網(wǎng)卡的性能測(cè)試?

    文章詳細(xì)介紹了如何在Linux系統(tǒng)中進(jìn)行CPU、內(nèi)存、磁盤(pán)和網(wǎng)卡的性能測(cè)試,通過(guò)dd命令、fio工具和iostat工具等展示了CPU壓力測(cè)試、內(nèi)存使用情況、磁盤(pán)I/O性能以及網(wǎng)絡(luò)流量監(jiān)控的方法,同時(shí),文章討論了不同測(cè)試工具的使用參數(shù)和指標(biāo),提供了具體的命令行示例
    2026-02-02
  • Linux 文件壓縮和打包簡(jiǎn)介

    Linux 文件壓縮和打包簡(jiǎn)介

    Linux 上常用的壓縮/解壓工具,介紹了zip、rar、tar的使用。今天我們來(lái)詳細(xì)探討下
    2018-10-10
  • 詳解Linux指令文件覆蓋和文件追加

    詳解Linux指令文件覆蓋和文件追加

    這篇文章主要介紹了Linux指令文件覆蓋和文件追加,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • linux安裝git的方法步驟

    linux安裝git的方法步驟

    這篇文章主要介紹了linux安裝git的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Linux之計(jì)劃任務(wù)和調(diào)度命令at/cron詳解

    Linux之計(jì)劃任務(wù)和調(diào)度命令at/cron詳解

    這篇文章主要介紹了Linux之計(jì)劃任務(wù)和調(diào)度命令at/cron的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • linux系統(tǒng)下部署項(xiàng)目訪(fǎng)問(wèn)報(bào)404錯(cuò)誤的解決方法

    linux系統(tǒng)下部署項(xiàng)目訪(fǎng)問(wèn)報(bào)404錯(cuò)誤的解決方法

    這篇文章主要為大家詳細(xì)介紹了linux系統(tǒng)下部署項(xiàng)目訪(fǎng)問(wèn)報(bào)404錯(cuò)誤的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Ubuntu系統(tǒng)下網(wǎng)絡(luò)配置文件解析與說(shuō)明

    Ubuntu系統(tǒng)下網(wǎng)絡(luò)配置文件解析與說(shuō)明

    這篇文章主要給大家介紹了關(guān)于Ubuntu系統(tǒng)下網(wǎng)絡(luò)配置文件的解析與說(shuō)明,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Ubuntu具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

项城市| 青铜峡市| 谢通门县| 兰坪| 米脂县| 宿迁市| 清丰县| 大荔县| 安远县| 潼关县| 喀喇沁旗| 桓台县| 宝山区| 建宁县| 象山县| 扬中市| 盐津县| 基隆市| 乌鲁木齐县| 五莲县| 安义县| 通许县| 潜江市| 南丰县| 中阳县| 钟山县| 赤壁市| 崇义县| 思南县| 阿尔山市| 彰武县| 平乐县| 奉新县| 安西县| 淳化县| 巴东县| 玛沁县| 治多县| 清苑县| 三门县| 永定县|