如何将 MEL 变量中的换行符传递给 Python
How to pass newline characters in MEL variables to Python
我测试了以下代码。效果很好。
string $testString = "test";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+$testString+"\\')\')");
同样的,我可以用Python写一个包含换行符的变量,如下图
testString = "test\ntest\n"
with open('C:/Users/username/Desktop/testString.txt', 'w') as f:
f.write(testString)
但是,当我测试下面的代码时,出现了错误。
string $testString = "test\ntest\n";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+$testString+"\\')\')");
错误信息如下:
# Error: line 2: EOL while scanning string literal #
我想结合使用 MEL 和 Python 将多行字符串输出到文本文件。如果可能的话,我想通过仅更改 python 代码而不更改 MEL 变量的内容来实现此目的。
我该怎么做?
我的环境是Maya2020 + Python2。
但是,我得到与 Maya2022 + Python3.
完全相同的错误
您需要多次转义字符串中的“\”符号(对于 MEL、Python 和 exec
):
string $testString = "test\\ntest\\n";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+$testString+"\\')\')");
或者,如果您希望完整保留字符串,请使用 encodeString
:
string $testString = "test\ntest\n";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+ encodeString(encodeString($testString)) + "\\')\')");
顺便说一下,您不需要使用 exec
。这样你就可以大大简化转义:
string $testString = "some test\ntest\n";
python("with open('C:/Users/username/Desktop/testString.txt', 'w') as f:\n\tf.write('"+ encodeString($testString) + "')");
另一种选择是使用 MEL 进行文件输出:
string $testString = "test\ntest\n";
$file_id = `fopen "C:/Users/username/Desktop/testString.txt" "w"`;
fprint $file_id $testString;
fclose $file_id;
我测试了以下代码。效果很好。
string $testString = "test";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+$testString+"\\')\')");
同样的,我可以用Python写一个包含换行符的变量,如下图
testString = "test\ntest\n"
with open('C:/Users/username/Desktop/testString.txt', 'w') as f:
f.write(testString)
但是,当我测试下面的代码时,出现了错误。
string $testString = "test\ntest\n";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+$testString+"\\')\')");
错误信息如下:
# Error: line 2: EOL while scanning string literal #
我想结合使用 MEL 和 Python 将多行字符串输出到文本文件。如果可能的话,我想通过仅更改 python 代码而不更改 MEL 变量的内容来实现此目的。
我该怎么做?
我的环境是Maya2020 + Python2。 但是,我得到与 Maya2022 + Python3.
完全相同的错误您需要多次转义字符串中的“\”符号(对于 MEL、Python 和 exec
):
string $testString = "test\\ntest\\n";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+$testString+"\\')\')");
或者,如果您希望完整保留字符串,请使用 encodeString
:
string $testString = "test\ntest\n";
python("exec(\'with open(\\'C:/Users/username/Desktop/testString.txt\\', \\'w\\') as f:\n\t\f.write(\\'"+ encodeString(encodeString($testString)) + "\\')\')");
顺便说一下,您不需要使用 exec
。这样你就可以大大简化转义:
string $testString = "some test\ntest\n";
python("with open('C:/Users/username/Desktop/testString.txt', 'w') as f:\n\tf.write('"+ encodeString($testString) + "')");
另一种选择是使用 MEL 进行文件输出:
string $testString = "test\ntest\n";
$file_id = `fopen "C:/Users/username/Desktop/testString.txt" "w"`;
fprint $file_id $testString;
fclose $file_id;