2010-07-15 48 views
7

Tôi vừa hoàn thành việc mã hóa một mô hình truyền bệnh có kích thước rất lớn trong C#. Tuy nhiên, tôi khá mới với .NET và không chắc chắn cách tiến hành. Hiện tại tôi chỉ cần nhấp đúp vào tệp .exe và mô hình nhập cấu hình cài đặt từ tệp văn bản, thực hiện điều đó và xuất kết quả vào tệp văn bản.Chạy ứng dụng C# từ tập lệnh python

Những gì tôi muốn làm tiếp theo là viết một kịch bản Python phải làm như sau:

  • Chạy mô phỏng N lần (N> 1000)
  • Sau mỗi lần chạy đổi tên tập tin đầu ra và lưu trữ (tức là ./output.txt -> ./acc/outputN.txt)
  • tổng hợp, phân tích, và phân tích các kết quả đầu ra
  • Output kết quả trong một số định dạng sạch (có thể nổi trội)

Phần lớn các kinh nghiệm lập trình của tôi cho đến nay đã có trong C/C++ trên Linux. Tôi khá tự tin về hai mục cuối; tuy nhiên, tôi không có ý tưởng làm thế nào để tiến hành cho hai người đầu tiên. Dưới đây là một số câu hỏi cụ thể mà tôi muốn được tư vấn về:

  • Cách dễ nhất/tốt nhất để chạy C# .exe của tôi từ tập lệnh python là gì?
  • Có ai có lời khuyên về cách tốt nhất để thực hiện các hoạt động hệ thống tập tin bằng Python trên hệ thống Windows không?

Cảm ơn!

+0

Chỉ cần tò mò, nhưng tại sao làm phần còn lại trong Python (và không có trong C#)? –

+0

Nếu bạn đang tìm kiếm các bài kiểm tra đơn vị, hãy thử NUnit: http://www.nunit.org/ – Bobby

+0

@Henk: Tôi muốn tránh thực hiện các thay đổi đối với chính mô hình đó. Do đó, làm những gì tôi muốn yêu cầu viết một ứng dụng/tập lệnh mới. Hiệu suất của giải pháp là không quan trọng, nhưng thời gian thực hiện để mã nó là. Tôi nghĩ rằng một ngôn ngữ kịch bản sẽ tốt hơn cho một loại kịch bản của vấn đề. Thêm vào đó, tôi thích python hơn. :) – Mandelbrot

Trả lời

11

Tính đến Python 2.6+ bạn nên sử dụng các mô-đun subprocess: (Docs)

import subprocess 

for v in range(1000): 
    cmdLine = r"c:\path\to\my\app.exe" 
    subprocess.Popen(subprocess) 
    subprocess.Popen(r"move output.txt ./acc/output-%d.txt" % (v)) 
+0

Ah-ha ai đó mà thực sự biết python thay vì chỉ nhìn vào tài liệu như tôi ... touche, điều này cần được đánh dấu đúng. – kersny

+0

Hoàn hảo, cảm ơn rất nhiều! – Mandelbrot

+1

Cải tiến sẽ sử dụng 'os.rename' thay vì thực hiện' di chuyển'. –

3

Câu trả lời cho các vấn đề của bạn có thể được tìm thấy trong 'os' trong thư viện chuẩn python. Tài liệu để thực hiện các thao tác khác nhau, chẳng hạn như xử lý tệp và quy trình bắt đầu, có thể được tìm thấy here.

Quản lý quy trình (Chạy chương trình C#) của bạn có thể được tìm thấy here và thao tác tệp là here.

EDIT: Trên thực tế, thay vì liên kết quá trình ở trên, bạn nên sử dụng subprocess module.

+0

Ah, chính xác những gì tôi cần. Tôi không thể tin rằng tôi đã không thấy điều đó sớm hơn. Cảm ơn nhiều! – Mandelbrot

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