2012-03-19 27 views
5

Tôi đang cố thực hiện lệnh git đơn giản bằng cách sử dụng tập lệnh python sau.cố gắng thực hiện lệnh git bằng cách sử dụng lệnh python

#!/usr/bin/python 

import commands 
import subprocess 
import os 
import sys 

pr = subprocess.Popen("/usr/bin/git log" , cwd = os.path.dirname('/ext/home/rakesh.kumar/workspace/myproject'), shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE) 
(out, error) = pr.communicate() 


print "Error : " + str(error) 
print "out : " + str(out) 

nhưng tôi nhận được lỗi sau ngay cả khi tôi đang chạy tập lệnh python trong cùng thư mục nơi git reposetory là.

Error : fatal: Not a git repository (or any of the parent directories): .git 

Tôi nghi ngờ git có thể bị correputed, nhưng các tệp git là tốt và lệnh git hoạt động nếu tôi thực thi trên dấu nhắc lệnh bình thường.

Tôi đã cố gắng tìm kiếm trên mạng nhưng không thể nhận được thông tin hữu ích. Xin hãy giúp nó sẽ được đánh giá cao.

+0

Có gì sai với mã kết thúc tốt đẹp ở 79 ký tự? –

Trả lời

4

Hãy thử điều này:

#!/usr/bin/python 

import commands 
import subprocess 
import os 
import sys 

pr = subprocess.Popen("/usr/bin/git log" , cwd = os.path.dirname('/ext/home/rakesh.kumar/workspace/myproject/'), shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE) 
(out, error) = pr.communicate() 


print "Error : " + str(error) 
print "out : " + str(out) 

đường Directory sẽ có '/' ở cuối.

+0

Cảm ơn bạn đã trả lời nhanh chóng của bạn Adam, nó hoạt động ngay bây giờ. – Rakesh

+0

Lưu ý rằng lỗi này cũng có thể xảy ra nếu bạn có bộ biến môi trường 'GIT_DIR' (đặc biệt là một đường dẫn tương đối, như có thể xảy ra trong git hooks) –

5

Vấn đề là việc bạn sử dụng os.path.dirname():

os.path.dirname('/ext/home/rakesh.kumar/workspace/myproject') 

sẽ cung cấp cho bạn:

>>> os.path.dirname('/ext/home/rakesh.kumar/workspace/myproject') 
'/ext/home/rakesh.kumar/workspace' 

đó, tôi đặt cược, không phải là những gì bạn muốn.

Các vấn đề liên quan