Chúc một ngày tốt lành! Tôi đang cố gắng triển khai một mô-đun kiểm tra kiến thức. Người dùng được giao một nhiệm vụ và anh ta viết quyết định được gửi và thực thi trên máy chủ. Câu hỏi dưới đây. Dữ liệu thô được lưu trữ trong tập tin. Ví dụ - Một giải pháp tùy chỉnh được lưu trữ trong chuỗi a=5b=7. ví dụ
s = a * b
p = a + b
in s,p
Bây giờ tất cả được viết dưới dạng một chuỗi trong một tệp riêng biệt.
'a = 5\n', 'b = 7', u's = a * b\r\np = a + b\r\nprint s,p'
Làm cách nào tôi có thể thực hiện việc này để mã được sử dụng có thể được thực thi. Nó sẽ như vậy.
a=5
b = 7
s = a * b
p = a + b
in s,p
Đây là chức năng của tôi để tạo ra giải pháp và thực hiện nó khi cần thiết.
def create_decision(user_decision, điều kiện):
f1 = open('temp_decision.py', 'w')
f = open(điều kiện, 'r+')
nội dung = f.readlines()
nội dung.append(user_decision)
f1.write(str(nội dung))
f1.close()
đầu ra = []
child_stdin, child_stdout, child_stderr = os.popen3("python temp_decision.py")
đầu ra = child_stdout.read()
đầu ra trở lại
Hoặc cho tôi biết tôi đang làm gì sai? Cảm ơn!
Bạn không cần tạo một tệp tạm thời, bạn chỉ cần sử dụngngười điều hành
. tạo_quyết định
Nó trông như thế này:
một
def create_decision(user_decision, điều kiện):
f = open(điều kiện, 'r+')
nội dung = f.readlines()
nội dung.append(user_decision)
# nối các mục trong danh sách với một dòng mới ở giữa và trả về kết quả dưới dạng chuỗi
đầu ra = eval('\n'.join(nội dung))
đầu ra trở lại
B
import sys
nhập StringIO
nhập khẩu ngữ cảnh
@contextlib.contextmanager
def stdoutIO(stdout=None):
cũ = sys.stdout
nếu thiết bị xuất chuẩn là Không có:
thiết bị xuất chuẩn = StringIO.StringIO()
sys.stdout = thiết bị xuất chuẩn
thiết bị xuất chuẩn năng suất
sys.stdout = cũ
def create_decision(user_decision, điều kiện):
f = open(điều kiện, 'r+')
nội dung = f.readlines()
nội dung.append(user_decision)
với stdoutIO() làm đầu ra:
#exec('\n'.join(contents)) # Python 3
exec '\n'.join(nội dung) # Python 2
trả về đầu ra.getvalue()
Bạn cũng nên sử dụng str.join()
Tạo một chuỗi từ danh sách các điều kiện. Nếu không, bạn không thể ghi nó vào một tệp hoặc thực thi nó (tôi đã thực hiện điều đó trong hàm trên).
biên tập: Có lỗi trong mã của tôi(người điều hành
không trả lại bất cứ thứ gì) vì vậy tôi đã thêm một chức năng với đánh giá
phương thức (nhưng phương pháp này không hoạt động để in vì nó đánh giá và trả về kết quả của một biểu thức, thông tin thêm đây ). Phương pháp thứ hai bắt in
Đầu ra của thiết bị xuất chuẩnIO
Từ một câu hỏi/câu trả lời khác (đây). Phương thức này trả về kết quả in nhưng phức tạp hơn một chút.
Tôi là một lập trình viên xuất sắc, rất giỏi!