2015-08-17 249 views
0

我有一組代碼,我想依次通過.py文件而不是.bat文件運行,我該怎麼做?我有這樣做的以下代碼:在python中運行批處理文件

#!/usr/bin/python 
    import sys 
    import os 
    bashCommand = "./available_itemsawk.sh" 
    os.system(bashCommand) 
    python_command="python run_process.py" 
    os.system(python_command) 

我有兩個問題: 1)我有shell腳本(available_itemsawk.sh)如下:

#!/bin/bash 
    join -1 4 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2 <(sort -k4 abc.txt) <(sort -k1 cdf.txt) > join.txt 
    awk '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6}' join.txt > temp 
    mv temp join.txt 

然而,當我打電話和運行它通過python腳本,我得到以下錯誤:

sort: write failed: standard output: Broken pipe 
    sort: write error 

2)如何通過os.system進程串行運行腳本?

 abc.txt 
     chr7 99999667 100000138 ENSG00000078487:I17.1  - 
     chr7 100000139 100000199 ENSG00000078487:E17.1 ENSE00001180416 - 
     chr9 100000046 100000367 ENSG00000203279:E2.1 ENSE00001678182 - 
     chr3 99998605 100000561 ENSG00000036054:I5.1  + 
     chr3 100000562 100000586 ENSG00000036054:E6.1 ENSE00001916783 + 
     chr3 100000586 100000691 ENSG00000036054:E6.2 ENSE00003639820|ENSE00001916783 + 
     chr9 99983518 100000704 ENSG00000159712:I1.1  - 
     chr9 100000368 100000704 ENSG00000203279:I1.1  - 
     chr9 100000731 100000765 ENSG00000254876:E1.1 ENSE00002183448 + 
     chr9 100000765 100000779 ENSG00000197816:E1.1 ENSE00003621967 + 


     cdf.txt 
     ENSG00000078487:I17.1 
     ENSG00000254876:E1.1 
     ENSG00000036054:E6.1 
     ENSG00000036054:I5.1 
     ENSG00000197816:E1.1 
+2

看起來像在shell腳本本身,獨立蟒蛇的錯誤。你能否確認當你直接執行shell腳本時,它可以工作? –

+0

@quantum_random:它獨立運行得很好,而且我使用mac終端作爲運行代碼的平臺。 – AishwaryaKulkarni

+0

您可以給出abc.txt和cdf.txt中內容的示例嗎?我可以嘗試在我的結尾重現這一點。我正在使用Ubuntu,但它應該沒關係。 –

回答

0

因爲我不能評論(還沒有50pts),這是我最好的猜測。

這似乎是一個權限問題。可以是每個腳本(批處理和Python)的單獨權限,也可以是腳本標題中定義的內容。

的Python腳本包含#!/usr/bin/python,而你的批處理文件#!/bin/bash

這可能不是你的問題的核心。但它讓我想到,也許你的.py腳本中的一個被擁有或被一個用戶執行的權限低於你的批處理腳本所需的權限,或者你的一個.txt文件。

我會確保您的所有腳本和輸入/輸出文件不需要提升權限。你是以用戶還是root用戶身份運行它們?這些可讀,可寫,可由用戶或只是root執行?

Arch Linux file permissions wiki entry.